void KMdiDockContainer::init() { bool overlap = isOverlapMode(); kdDebug( 760 ) << k_funcinfo << endl; if ( !m_horizontal ) { kdDebug( 760 ) << k_funcinfo << "Horizontal tabbar. Setting forced fixed width." << endl; parentDockWidget()->setForcedFixedWidth( m_tb->width() ); activateOverlapMode( m_tb->width() ); } else { kdDebug( 760 ) << k_funcinfo << "Vertical tabbar. Setting forced fixed height." << endl; parentDockWidget()->setForcedFixedHeight( m_tb->height() ); activateOverlapMode( m_tb->height() ); } if (!overlap) deactivateOverlapMode(); // try to restore splitter size if ( parentDockWidget() && parentDockWidget()->parent() ) { KDockSplitter * sp = ::tqqt_cast<KDockSplitter*>( parentDockWidget()->parent() ); if ( sp ) sp->setSeparatorPosX( m_separatorPos ); } }
void KMdiDockContainer::save( KConfig* cfg, const QString& group_or_prefix ) { QString grp = cfg->group(); cfg->deleteGroup( group_or_prefix + QString( "::%1" ).arg( parent() ->name() ) ); cfg->setGroup( group_or_prefix + QString( "::%1" ).arg( parent() ->name() ) ); if ( isOverlapMode() ) cfg->writeEntry( "overlapMode", "true" ); else cfg->writeEntry( "overlapMode", "false" ); // try to save the splitter position if ( parentDockWidget() && parentDockWidget() ->parent() ) { KDockSplitter * sp = static_cast<KDockSplitter*>( parentDockWidget() -> parent() ->qt_cast( "KDockSplitter" ) ); if ( sp ) cfg->writeEntry( "separatorPosition", m_separatorPos ); } QPtrList<KMultiTabBarTab>* tl = m_tb->tabs(); QPtrListIterator<KMultiTabBarTab> it( *tl ); QStringList::Iterator it2 = itemNames.begin(); int i = 0; for ( ;it.current() != 0;++it, ++it2 ) { // cfg->writeEntry(QString("widget%1").arg(i),m_ws->widget(it.current()->id())->name()); cfg->writeEntry( QString( "widget%1" ).arg( i ), ( *it2 ) ); QString s = tabCaptions[ *it2 ]; if ( !s.isEmpty() ) { cfg->writeEntry( QString( "widget%1-tabCaption" ).arg( i ), s ); } s = tabTooltips[ *it2 ]; if ( !s.isEmpty() ) { cfg->writeEntry( QString( "widget%1-tabTooltip" ).arg( i ), s ); } // kdDebug(760)<<"****************************************Saving: "<<m_ws->widget(it.current()->id())->name()<<endl; if ( m_tb->isTabRaised( it.current() ->id() ) ) cfg->writeEntry( m_ws->widget( it.current() ->id() ) ->name(), true ); ++i; } cfg->sync(); cfg->setGroup( grp ); }
void KMdiDockContainer::load( TDEConfig* cfg, const TQString& group_or_prefix ) { TQString grp = cfg->group(); cfg->setGroup( group_or_prefix + TQString( "::%1" ).arg( parent() ->name() ) ); if ( cfg->readEntry( "overlapMode" ) != "false" ) activateOverlapMode( m_horizontal?m_tb->height():m_tb->width() ); else deactivateOverlapMode(); m_separatorPos = cfg->readNumEntry( "separatorPosition", 18000 ); int i = 0; TQString raise; while ( true ) { TQString dwn = cfg->readEntry( TQString( "widget%1" ).arg( i ) ); if ( dwn.isEmpty() ) break; kdDebug( 760 ) << k_funcinfo << "configuring dockwidget :" << dwn << endl; KDockWidget *dw = ( ( KDockWidget* ) parent() ) ->dockManager() ->getDockWidgetFromName( dwn ); if ( dw ) { TQString s = cfg->readEntry( TQString( "widget%1-tabCaption" ).arg( i ) ); if ( !s.isEmpty() ) { dw->setTabPageLabel( s ); } s = cfg->readEntry( TQString( "widget%1-tabTooltip" ).arg( i ) ); if ( !s.isEmpty() ) { dw->setToolTipString( s ); } dw->manualDock( ( KDockWidget* ) parent(), KDockWidget::DockCenter ); } if ( cfg->readBoolEntry( dwn, false ) ) raise = dwn; i++; } TQPtrList<KMultiTabBarTab>* tl = m_tb->tabs(); TQPtrListIterator<KMultiTabBarTab> it1( *tl ); m_ws->hide(); if ( !m_horizontal ) parentDockWidget() ->setForcedFixedWidth( m_tb->width() ); else parentDockWidget() ->setForcedFixedHeight( m_tb->height() ); for ( ;it1.current() != 0;++it1 ) { m_tb->setTab( it1.current() ->id(), false ); } kapp->syncX(); m_delayedRaise = -1; for ( TQMap<KDockWidget*, KDockButton_Private*>::iterator it = m_overlapButtons.begin(); it != m_overlapButtons.end();++it ) it.data() ->setOn( !isOverlapMode() ); if ( !raise.isEmpty() ) { for ( TQMap<KDockWidget*, int>::iterator it = m_map.begin();it != m_map.end();++it ) { if ( it.key() ->name() == raise ) { /* tabClicked(it.data()); m_tb->setTab(it.data(),true); tabClicked(it.data()); m_ws->raiseWidget(it.key()); kapp->sendPostedEvents(); kapp->syncX();*/ m_delayedRaise = it.data(); TQTimer::singleShot( 0, this, TQT_SLOT( delayedRaise() ) ); kdDebug( 760 ) << k_funcinfo << "raising" << it.key() ->name() << endl; break; } } } if ( m_delayedRaise == -1 ) TQTimer::singleShot( 0, this, TQT_SLOT( init() ) ); cfg->setGroup( grp ); }
void KMdiDockContainer::load( TQDomElement& dockEl ) { TQString raise; for ( TQDomNode n = dockEl.firstChild();!n.isNull();n = n.nextSibling() ) { TQDomElement el = n.toElement(); if ( el.isNull() ) continue; if ( el.tagName() == "overlapMode" ) { if ( el.attribute( "overlapMode" ) != "false" ) activateOverlapMode( m_horizontal?m_tb->height():m_tb->width() ); else deactivateOverlapMode(); } else if ( el.tagName() == "child" ) { KDockWidget * dw = ( ( KDockWidget* ) parent() ) ->dockManager() ->getDockWidgetFromName( el.text() ); if ( dw ) { if ( el.hasAttribute( "tabCaption" ) ) { dw->setTabPageLabel( el.attribute( "tabCaption" ) ); } if ( el.hasAttribute( "tabTooltip" ) ) { dw->setToolTipString( el.attribute( "tabTooltip" ) ); } dw->manualDock( ( KDockWidget* ) parent(), KDockWidget::DockCenter ); } } } TQPtrList<KMultiTabBarTab>* tl = m_tb->tabs(); TQPtrListIterator<KMultiTabBarTab> it1( *tl ); m_ws->hide(); if ( !m_horizontal ) parentDockWidget()->setForcedFixedWidth( m_tb->width() ); else parentDockWidget()->setForcedFixedHeight( m_tb->height() ); for ( ;it1.current() != 0;++it1 ) m_tb->setTab( it1.current() ->id(), false ); kapp->syncX(); m_delayedRaise = -1; for ( TQMap<KDockWidget*, KDockButton_Private*>::iterator it = m_overlapButtons.begin(); it != m_overlapButtons.end();++it ) it.data() ->setOn( !isOverlapMode() ); if ( !raise.isEmpty() ) { for ( TQMap<KDockWidget*, int>::iterator it = m_map.begin();it != m_map.end();++it ) { if ( it.key() ->name() == raise ) { m_delayedRaise = it.data(); TQTimer::singleShot( 0, this, TQT_SLOT( delayedRaise() ) ); kdDebug( 760 ) << k_funcinfo << "raising " << it.key()->name() << endl; break; } } } if ( m_delayedRaise == -1 ) TQTimer::singleShot( 0, this, TQT_SLOT( init() ) ); }
void KMdiDockContainer::tabClicked( int t ) { bool call_makeVisible = !m_tabSwitching; m_tabSwitching = true; if ( m_tb->isTabRaised( t ) ) { kdDebug( 760 ) << k_funcinfo << "Tab " << t << " was just activated" << endl; if ( m_ws->isHidden() ) { kdDebug( 760 ) << k_funcinfo << "Showing widgetstack for tab just clicked" << endl; m_ws->show(); parentDockWidget()->restoreFromForcedFixedSize(); } if ( !m_ws->widget( t ) ) { kdDebug( 760 ) << k_funcinfo << "Widget tab was clicked for is not in our stack" << endl; kdDebug( 760 ) << k_funcinfo << "Docking it back in" << endl; m_revMap[t]->manualDock( parentDockWidget(), KDockWidget::DockCenter, 20 ); if ( call_makeVisible ) m_revMap[t]->makeDockVisible(); m_tabSwitching = false; emit activated( this ); return ; } if ( m_ws->widget( t ) ) { m_ws->raiseWidget( t ); KDockWidget * tmpDw = ::tqqt_cast<KDockWidget*>( m_ws->widget( t ) ); if ( tmpDw ) { if ( tmpDw->getWidget() ) tmpDw->getWidget()->setFocus(); } else kdDebug( 760 ) << k_funcinfo << "Something really weird is going on" << endl; } else kdDebug( 760 ) << k_funcinfo << "We have no widget to handle in our stack." << endl; if ( oldtab != t ) m_tb->setTab( oldtab, false ); m_tabSwitching = true; oldtab = t; emit activated( this ); } else { kdDebug( 760 ) << k_funcinfo << "Tab " << t << " was just deactiviated" << endl; // try save splitter position if ( parentDockWidget() && parentDockWidget()->parent() ) { KDockSplitter * sp = ::tqqt_cast<KDockSplitter*>( parentDockWidget()->parent() ); if ( sp ) m_separatorPos = sp->separatorPos(); } m_previousTab = t; // oldtab=-1; if ( m_block ) return ; emit deactivated( this ); m_block = true; if ( m_ws->widget( t ) ) { // ((KDockWidget*)m_ws->widget(t))->undock(); } m_block = false; m_ws->hide (); kdDebug( 760 ) << k_funcinfo << "Fixed Width:" << m_tb->width() << endl; if ( !m_horizontal ) parentDockWidget()->setForcedFixedWidth( m_tb->width() ); // strange why it worked before at all else parentDockWidget()->setForcedFixedHeight( m_tb->height() ); // strange why it worked before at all } m_tabSwitching = false; }
void DockContainer::tabClicked(int t) { kdDebug(760) << "DockContainer::tabClicked()" << endl; bool call_makeVisible = !m_tabSwitching; m_tabSwitching = true; if((t != -1) && m_tb->isTabRaised(t)) { if(m_ws->isHidden()) { m_ws->show(); parentDockWidget()->restoreFromForcedFixedSize(); } if(!m_ws->widget(t)) { m_revMap[t]->manualDock(parentDockWidget(), KDockWidget::DockCenter, 20); if(call_makeVisible) m_revMap[t]->makeDockVisible(); // manualDock(parentDockWidget(),KDockWidget::DockCenter,20); m_tabSwitching = false; emit activated(this); return; } m_ws->raiseWidget(t); if(m_ws->widget(t)) { KDockWidget *tmpDw = static_cast< KDockWidget * >(m_ws->widget(t)->qt_cast("KDockWidget")); if(tmpDw) { if(tmpDw->getWidget()) tmpDw->getWidget()->setFocus(); } else kdDebug(760) << "Something really weird is going on" << endl; } else kdDebug(760) << "DockContainer::tabClicked(int): m_ws->widget(t)==0 " << endl; if(oldtab != t) m_tb->setTab(oldtab, false); m_tabSwitching = true; oldtab = t; emit activated(this); } else { // try save splitter position if(parentDockWidget() && parentDockWidget()->parent()) { KDockSplitter *sp = static_cast< KDockSplitter * >(parentDockWidget()->parent()->qt_cast("KDockSplitter")); if(sp) m_separatorPos = sp->separatorPos(); } m_previousTab = t; // oldtab=-1; if(m_block) return; emit deactivated(this); m_block = true; if(m_ws->widget(t)) { // ((KDockWidget*)m_ws->widget(t))->undock(); } m_block = false; m_ws->hide(); kdDebug(760) << "Fixed Width:" << m_tb->width() << endl; if(m_vertical) parentDockWidget()->setForcedFixedWidth(m_tb->width()); // strange why it worked before at all else parentDockWidget()->setForcedFixedHeight(m_tb->height()); // strange why it worked before at all } m_tabSwitching = false; }
bool DockContainer::eventFilter(QObject *obj, QEvent *event) { if(obj == m_tb) { if((event->type() == QEvent::Resize) && (m_ws->isHidden())) { QSize size = ((QResizeEvent *)event)->size(); if(m_vertical) parentDockWidget()->setForcedFixedWidth(size.width()); else parentDockWidget()->setForcedFixedHeight(size.height()); } } else switch(event->type()) { case QEvent::MouseButtonPress: { KDockWidget *w = m_revMap[dynamic_cast< KMultiTabBarTab * >(obj)->id()]; if(!w) { kdDebug() << "NoWidget" << endl; break; } if(!w->getHeader()) { kdDebug() << "NO HEADER" << endl; break; } KDockWidgetHeader *hdr = static_cast< KDockWidgetHeader * >(w->getHeader()->qt_cast("KDockWidgetHeader")); if(!hdr) { kdDebug() << "Wrong header type in DockContainer::eventFilter" << endl; break; } m_dockManager = w->dockManager(); m_dragPanel = hdr->dragPanel(); if(m_dragPanel) m_movingState = WaitingForMoveStart; delete m_startEvent; m_startEvent = new QMouseEvent(*((QMouseEvent *)event)); } break; case QEvent::MouseButtonRelease: if(m_movingState == Moving) { m_movingState = NotMoving; QApplication::postEvent(m_dragPanel, new QMouseEvent(*((QMouseEvent *)event))); delete m_startEvent; m_startEvent = 0; } break; case QEvent::MouseMove: if(m_movingState == WaitingForMoveStart) { QPoint p(((QMouseEvent *)event)->pos() - m_startEvent->pos()); if(p.manhattanLength() > KGlobalSettings::dndEventDelay()) { m_dockManager->eventFilter(m_dragPanel, m_startEvent); m_dockManager->eventFilter(m_dragPanel, event); m_movingState = Moving; } } else if(m_movingState == Moving) { m_dockManager->eventFilter(m_dragPanel, event); } break; default: break; } return false; }