41 #include <tqclipboard.h>
42 #include <tqobjectlist.h>
43 #include <tqpopupmenu.h>
44 #include <tqmenubar.h>
46 #include <tdemenubar.h>
47 #include <tdeapplication.h>
49 #include <tqtabwidget.h>
50 #include <tdelocale.h>
51 #include <tdestdaccel.h>
53 #include <kiconloader.h>
54 #include <tdemdidockcontainer.h>
57 #include <tqtoolbutton.h>
58 #include <tqdockarea.h>
61 #include <tqtextstream.h>
64 #include <tqvaluelist.h>
66 #include "tdemdimainfrm.h"
67 #include "tdemditaskbar.h"
68 #include "tdemdichildfrm.h"
69 #include "tdemdichildarea.h"
70 #include "tdemdichildview.h"
71 #include "tdemdidockcontainer.h"
72 #include "tdemditoolviewaccessor_p.h"
73 #include "tdemdifocuslist.h"
74 #include "tdemdidocumentviewtabwidget.h"
75 #include "tdemdiguiclient.h"
77 #include "win_undockbutton.xpm"
78 #include "win_minbutton.xpm"
79 #include "win_restorebutton.xpm"
80 #include "win_closebutton.xpm"
81 #include "kde_undockbutton.xpm"
82 #include "kde_minbutton.xpm"
83 #include "kde_restorebutton.xpm"
84 #include "kde_closebutton.xpm"
85 #include "kde2_undockbutton.xpm"
86 #include "kde2_minbutton.xpm"
87 #include "kde2_restorebutton.xpm"
88 #include "kde2_closebutton.xpm"
89 #include "kde2laptop_undockbutton.xpm"
90 #include "kde2laptop_minbutton.xpm"
91 #include "kde2laptop_restorebutton.xpm"
92 #include "kde2laptop_closebutton.xpm"
93 #include "kde2laptop_closebutton_menu.xpm"
110 #endif // TQ_WS_X11 && ! K_WS_QTONLY
112 using namespace KParts;
114 KMdi::FrameDecor KMdiMainFrm::m_frameDecoration = KMdi::KDELook;
116 class KMdiMainFrmPrivate
119 KMdiMainFrmPrivate() : focusList( 0 )
121 for (
int i = 0;i < 4;i++ )
123 activeDockPriority[ i ] = 0;
124 m_styleIDEAlMode = 0;
128 ~KMdiMainFrmPrivate()
130 KMdiDockContainer* activeDockPriority[ 4 ];
131 KMdiFocusList *focusList;
132 int m_styleIDEAlMode;
134 TDEAction *closeWindowAction;
138 KMdiMainFrm::KMdiMainFrm( TQWidget* parentWidget,
const char* name, KMdi::MdiMode mdiMode, WFlags flags )
139 : KParts::DockMainWindow( parentWidget, name, flags )
140 , m_mdiMode(
KMdi::UndefinedMode )
143 , m_pDocumentViews( 0L )
144 , m_pCurrentWindow( 0L )
145 , m_pWindowPopup( 0L )
146 , m_pTaskBarPopup( 0L )
147 , m_pWindowMenu( 0L )
149 , m_pMdiModeMenu( 0L )
150 , m_pPlacingMenu( 0L )
151 , m_pMainMenuBar( 0L )
152 , m_pUndockButtonPixmap( 0L )
153 , m_pMinButtonPixmap( 0L )
154 , m_pRestoreButtonPixmap( 0L )
155 , m_pCloseButtonPixmap( 0L )
160 , m_bMaximizedChildFrmMode( false )
161 , m_oldMainFrmHeight( 0 )
162 , m_oldMainFrmMinHeight( 0 )
163 , m_oldMainFrmMaxHeight( 0 )
164 , m_bSDIApplication( false )
165 , m_pDockbaseAreaOfDocumentViews( 0L )
166 , m_pTempDockSession( 0L )
167 , m_bClearingOfWindowMenuBlocked( false )
168 , m_pDragEndTimer( 0L )
169 , m_bSwitching( false )
170 , m_leftContainer( 0 )
171 , m_rightContainer( 0 )
172 , m_topContainer( 0 )
173 , m_bottomContainer( 0 )
174 , d( new KMdiMainFrmPrivate() )
175 , m_mdiGUIClient( 0 )
176 , m_managedDockPositionMode( false )
177 , m_documentTabWidget( 0 )
179 kdDebug(760) << k_funcinfo << endl;
181 m_pDocumentViews =
new TQPtrList<KMdiChildView>;
182 m_pDocumentViews->setAutoDelete(
false );
183 m_pToolViews =
new TQMap<TQWidget*, KMdiToolViewAccessor*>;
186 setFocusPolicy( TQWidget::ClickFocus );
192 m_pDockbaseAreaOfDocumentViews = createDockWidget(
"mdiAreaCover", TQPixmap(), 0L,
"mdi_area_cover" );
193 m_pDockbaseAreaOfDocumentViews->setDockWindowTransient(
this,
true );
194 m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockNone );
195 m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockCorner );
196 m_pDockbaseAreaOfDocumentViews->setWidget( m_pMdi );
198 setView( m_pDockbaseAreaOfDocumentViews );
199 setMainDockWidget( m_pDockbaseAreaOfDocumentViews );
204 m_pTaskBarPopup =
new TQPopupMenu(
this,
"taskbar_popup_menu" );
205 m_pWindowPopup =
new TQPopupMenu(
this,
"window_popup_menu" );
207 m_pWindowMenu =
new TQPopupMenu(
this,
"window_menu" );
208 m_pWindowMenu->setCheckable(
true );
209 TQObject::connect( m_pWindowMenu, TQ_SIGNAL( aboutToShow() ),
this, TQ_SLOT( fillWindowMenu() ) );
211 m_pDockMenu =
new TQPopupMenu(
this,
"dock_menu" );
212 m_pDockMenu->setCheckable(
true );
214 m_pMdiModeMenu =
new TQPopupMenu(
this,
"mdimode_menu" );
215 m_pMdiModeMenu->setCheckable(
true );
217 m_pPlacingMenu =
new TQPopupMenu(
this,
"placing_menu" );
219 d->closeWindowAction =
new TDEAction(i18n(
"&Close"), TDEStdAccel::close(),
220 this, TQ_SLOT(closeActiveView()), actionCollection(),
"window_close");
227 setMenuForSDIModeSysButtons( menuBar() );
231 case KMdi::IDEAlMode:
232 kdDebug(760) << k_funcinfo <<
"Switching to IDEAl mode" << endl;
235 case KMdi::TabPageMode:
236 kdDebug(760) << k_funcinfo <<
"Switching to tab page mode" << endl;
237 switchToTabPageMode();
239 case KMdi::ToplevelMode:
240 kdDebug(760) << k_funcinfo <<
"Switching to top level mode" << endl;
241 switchToToplevelMode();
244 m_mdiMode = KMdi::ChildframeMode;
245 kdDebug(760) << k_funcinfo <<
"Switching to child frame mode" << endl;
250 m_pDragEndTimer =
new TQTimer();
251 connect( m_pDragEndTimer, TQ_SIGNAL( timeout() ),
this, TQ_SLOT( dragEndTimeOut() ) );
252 connect( guiFactory(), TQ_SIGNAL( clientAdded( KXMLGUIClient* ) ),
253 this, TQ_SLOT( verifyToplevelHeight() ) );
254 connect( guiFactory(), TQ_SIGNAL( clientRemoved( KXMLGUIClient* ) ),
255 this, TQ_SLOT( verifyToplevelHeight() ) );
258 void KMdiMainFrm::verifyToplevelHeight()
260 if ( m_mdiMode != KMdi::ToplevelMode )
264 int topDockHeight = topDock() ? topDock()->height() : 0;
265 int menuBarHeight = hasMenuBar() ? menuBar()->height() : 0;
266 setFixedHeight( topDockHeight + menuBarHeight );
267 resize( width(), height() );
273 connect( m_mdiGUIClient, TQ_SIGNAL( toggleTop() ),
this, TQ_SIGNAL( toggleTop() ) );
274 connect( m_mdiGUIClient, TQ_SIGNAL( toggleLeft() ),
this, TQ_SIGNAL( toggleLeft() ) );
275 connect( m_mdiGUIClient, TQ_SIGNAL( toggleRight() ),
this, TQ_SIGNAL( toggleRight() ) );
276 connect( m_mdiGUIClient, TQ_SIGNAL( toggleBottom() ),
this, TQ_SIGNAL( toggleBottom() ) );
278 if ( m_mdiMode == KMdi::IDEAlMode )
280 if ( m_topContainer )
281 connect(
this, TQ_SIGNAL( toggleTop() ), m_topContainer->getWidget(), TQ_SLOT( toggle() ) );
282 if ( m_leftContainer )
283 connect(
this, TQ_SIGNAL( toggleLeft() ), m_leftContainer->getWidget(), TQ_SLOT( toggle() ) );
284 if ( m_rightContainer )
285 connect(
this, TQ_SIGNAL( toggleRight() ), m_rightContainer->getWidget(), TQ_SLOT( toggle() ) );
286 if ( m_bottomContainer )
287 connect(
this, TQ_SIGNAL( toggleBottom() ), m_bottomContainer->getWidget(), TQ_SLOT( toggle() ) );
290 emit mdiModeHasBeenChangedTo( m_mdiMode );
294 KMdiMainFrm::~KMdiMainFrm()
297 TQValueList<KMdiChildView*> children;
298 for (
KMdiChildView * w = m_pDocumentViews->first();w;w = m_pDocumentViews->next() )
299 children.append( w );
302 TQValueListIterator<KMdiChildView*> childIt;
303 for ( childIt = children.begin(); childIt != children.end(); ++childIt )
305 closeWindow( *childIt,
false );
308 emit lastChildViewClosed();
309 delete m_pDocumentViews;
312 delete m_pDragEndTimer;
314 delete m_pUndockButtonPixmap;
315 delete m_pMinButtonPixmap;
316 delete m_pRestoreButtonPixmap;
317 delete m_pCloseButtonPixmap;
321 delete m_pMdiModeMenu;
322 delete m_pPlacingMenu;
323 delete m_pTaskBarPopup;
324 delete m_pWindowPopup;
325 delete m_pWindowMenu;
326 delete m_mdiGUIClient;
327 delete m_pTempDockSession;
337 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
338 for ( ; ( *it ); ++it )
340 TQWidget* childFrame = 0L;
341 if ( ( *it )->mdiParent() )
343 kdDebug(760) << k_funcinfo <<
"using child view's mdi parent for resize hack" << endl;
344 childFrame = ( *it )->mdiParent();
348 kdDebug(760) << k_funcinfo <<
"using child view for resize hack" << endl;
349 childFrame = ( *it );
352 int w = childFrame->width();
353 int h = childFrame->height();
354 childFrame->resize( w + 1, h + 1 );
355 childFrame->resize( w - 1, h - 1 );
362 kdDebug(760) << k_funcinfo <<
"creating MDI manager" << endl;
364 setCentralWidget( m_pMdi );
365 TQObject::connect( m_pMdi, TQ_SIGNAL( nowMaximized(
bool ) ),
366 this, TQ_SLOT( setEnableMaximizedChildFrmMode(
bool ) ) );
367 TQObject::connect( m_pMdi, TQ_SIGNAL( noMaximizedChildFrmLeft(
KMdiChildFrm* ) ),
368 this, TQ_SLOT( switchOffMaximizeModeForMenu(
KMdiChildFrm* ) ) );
371 TQObject::connect( m_pMdi, TQ_SIGNAL( popupWindowMenu( TQPoint ) ),
372 this, TQ_SLOT( popupWindowMenu( TQPoint ) ) );
373 TQObject::connect( m_pMdi, TQ_SIGNAL( lastChildFrmClosed() ),
374 this, TQ_SIGNAL( lastChildFrmClosed() ) );
380 m_pTaskBar =
new KMdiTaskBar(
this, TQMainWindow::DockBottom );
381 m_pTaskBar->installEventFilter(
this );
388 m_pTaskBar->switchOn( !m_pTaskBar->isSwitchedOn() );
391 void KMdiMainFrm::resizeEvent( TQResizeEvent *e )
393 if ( ( m_mdiMode == KMdi::ToplevelMode ) && !parentWidget() )
395 if ( e->oldSize().height() != e->size().height() )
398 KParts::DockMainWindow::resizeEvent( e );
399 if ( !m_mdiGUIClient )
401 setSysButtonsAtMenuPosition();
408 if ( ( m_mdiMode == KMdi::ToplevelMode ) && !parentWidget() )
410 DockMainWindow::setMinimumSize( minw, minh );
421 TQBoxLayout* pLayout =
new TQHBoxLayout( pMDICover, 0, -1,
"layout" );
422 view->reparent( pMDICover, TQPoint( 0, 0 ) );
423 pLayout->addWidget( view );
428 const TQPixmap* wndIcon = view->icon();
430 pMDICover->setIcon( *wndIcon );
432 pMDICover->trackIconAndCaptionChanges( view );
440 addWindow( pWnd, flags, -1 );
445 if ( windowExists( pWnd, AnyView ) )
448 if ( flags & KMdi::ToolWindow )
450 addToolWindow( pWnd );
452 pWnd->move( m_pMdi->mapToGlobal( m_pMdi->getCascadePoint() ) );
457 d->closeWindowAction->setEnabled(
true);
460 TQObject::connect( pWnd, TQ_SIGNAL( clickedInWindowMenu(
int ) ),
this, TQ_SLOT( windowMenuItemActivated(
int ) ) );
461 TQObject::connect( pWnd, TQ_SIGNAL( focusInEventOccurs(
KMdiChildView* ) ),
this, TQ_SLOT( activateView(
KMdiChildView* ) ) );
462 TQObject::connect( pWnd, TQ_SIGNAL( childWindowCloseRequest(
KMdiChildView* ) ),
this, TQ_SLOT( childWindowCloseRequest(
KMdiChildView* ) ) );
463 TQObject::connect( pWnd, TQ_SIGNAL( attachWindow(
KMdiChildView*,
bool ) ),
this, TQ_SLOT( attachWindow(
KMdiChildView*,
bool ) ) );
464 TQObject::connect( pWnd, TQ_SIGNAL( detachWindow(
KMdiChildView*,
bool ) ),
this, TQ_SLOT( detachWindow(
KMdiChildView*,
bool ) ) );
465 TQObject::connect( pWnd, TQ_SIGNAL( clickedInDockMenu(
int ) ),
this, TQ_SLOT( dockMenuItemActivated(
int ) ) );
470 m_pDocumentViews->append( pWnd );
472 m_pDocumentViews->insert( index, pWnd );
477 TQObject::connect( pWnd, TQ_SIGNAL( tabCaptionChanged(
const TQString& ) ), but, TQ_SLOT( setNewText(
const TQString& ) ) );
481 if ( m_mdiMode == KMdi::TabPageMode || m_mdiMode == KMdi::IDEAlMode )
485 pixmap = *( pWnd->icon() );
487 m_documentTabWidget->insertTab( pWnd, pixmap, pWnd->
tabCaption(), index );
489 connect( pWnd, TQ_SIGNAL( iconUpdated( TQWidget*, TQPixmap ) ), m_documentTabWidget, TQ_SLOT( updateIconInView( TQWidget*, TQPixmap ) ) );
490 connect( pWnd, TQ_SIGNAL( captionUpdated( TQWidget*,
const TQString& ) ), m_documentTabWidget, TQ_SLOT( updateCaptionInView( TQWidget*,
const TQString& ) ) );
494 if ( ( flags & KMdi::Detach ) || ( m_mdiMode == KMdi::ToplevelMode ) )
496 detachWindow( pWnd, !( flags & KMdi::Hide ) );
497 emit childViewIsDetachedNow( pWnd );
500 attachWindow( pWnd, !( flags & KMdi::Hide ), flags & KMdi::UseKMdiSizeHint );
502 if ( ( m_bMaximizedChildFrmMode && ( !m_bSDIApplication && ( flags & KMdi::Detach ) )
503 && m_mdiMode != KMdi::ToplevelMode ) || ( flags & KMdi::Maximize ) )
509 if ( !m_bSDIApplication || ( flags & KMdi::Detach ) )
511 if ( flags & KMdi::Minimize )
514 if ( !( flags & KMdi::Hide ) )
528 addWindow( pWnd, flags );
529 if ( m_bMaximizedChildFrmMode && pWnd->
isAttached() )
532 pWnd->setGeometry( rectNormal );
538 addWindow( pWnd, flags );
539 if ( m_bMaximizedChildFrmMode && pWnd->
isAttached() )
549 return new KMdiToolViewAccessor(
this );
553 void KMdiMainFrm::deleteToolWindow( TQWidget* pWnd )
555 if ( m_pToolViews->contains( pWnd ) )
556 deleteToolWindow( ( *m_pToolViews ) [ pWnd ] );
559 void KMdiMainFrm::deleteToolWindow( KMdiToolViewAccessor *accessor )
566 int percent,
const TQString& tabToolTip,
const TQString& tabCaption )
568 TQWidget* tvta = pWnd;
569 KDockWidget* pDW = dockManager->getDockWidgetFromName( pWnd->name() );
573 pDW->setWidget( pWnd );
576 pDW->setPixmap( *pWnd->icon() );
578 pDW->setTabPageLabel( ( tabCaption == 0 ) ? pWnd->caption() : tabCaption );
579 pDW->setToolTipString( tabToolTip );
580 dockManager->removeFromAutoCreateList( pDW );
584 TQRect r = pWnd->geometry();
586 KMdiToolViewAccessor *mtva =
new KMdiToolViewAccessor(
this, pWnd, tabToolTip, ( tabCaption == 0 ) ? pWnd->caption() : tabCaption );
587 m_pToolViews->insert( tvta, mtva );
589 if ( pos == KDockWidget::DockNone )
591 mtva->d->widgetContainer->setEnableDocking( KDockWidget::DockNone );
592 mtva->d->widgetContainer->reparent(
this, (WFlags)(WType_TopLevel | WType_Dialog), r.topLeft(),
true );
595 mtva->place( pos, pTargetWnd, percent );
604 pWnd->installEventFilter(
this );
607 bool bCascade =
false;
608 TQApplication::sendPostedEvents();
609 TQRect frameGeo = pWnd->frameGeometry();
610 TQPoint topLeftScreen = pWnd->mapToGlobal( TQPoint( 0, 0 ) );
611 TQPoint topLeftMdiChildArea = m_pMdi->mapFromGlobal( topLeftScreen );
612 TQRect childAreaGeo = m_pMdi->geometry();
613 if ( topLeftMdiChildArea.x() < 0 || topLeftMdiChildArea.y() < 0 ||
614 ( topLeftMdiChildArea.x() + frameGeo.width() > childAreaGeo.width() ) ||
615 ( topLeftMdiChildArea.y() + frameGeo.height() > childAreaGeo.height() ) )
624 lpC->move( topLeftMdiChildArea );
626 lpC->
setClient( pWnd, bAutomaticResize );
629 if ( ( m_mdiMode == KMdi::ToplevelMode ) && !parentWidget() )
631 setMinimumHeight( m_oldMainFrmMinHeight );
632 setMaximumHeight( m_oldMainFrmMaxHeight );
633 resize( width(), m_oldMainFrmHeight );
634 m_oldMainFrmHeight = 0;
635 switchToChildframeMode();
638 m_pMdi->manageChild( lpC,
false, bCascade );
639 if ( m_pMdi->topChild() && m_pMdi->topChild() ->isMaximized() )
641 TQRect r = lpC->geometry();
642 lpC->setGeometry( -lpC->m_pClient->x(), -lpC->m_pClient->y(),
643 m_pMdi->width() + KMDI_CHILDFRM_DOUBLE_BORDER,
644 m_pMdi->height() + lpC->
captionHeight() + KMDI_CHILDFRM_SEPARATOR + KMDI_CHILDFRM_DOUBLE_BORDER );
654 TQFocusEvent fe( TQEvent::FocusIn );
655 TQApplication::sendEvent( pWnd, &fe );
657 m_pCurrentWindow = pWnd;
665 pWnd->removeEventFilter(
this );
668 if ( pWnd->parent() )
675 TQPixmap pixm( *( lpC->
icon() ) );
676 pWnd->setIcon( pixm );
678 TQString capt( lpC->
caption() );
682 m_pMdi->destroyChildButNotItsView( lpC,
false );
689 if ( pWnd->size().isEmpty() || ( pWnd->size() == TQSize( 1, 1 ) ) )
691 if ( m_pCurrentWindow )
693 pWnd->setGeometry( TQRect( m_pMdi->getCascadePoint( m_pDocumentViews->count() - 1 ), m_pCurrentWindow->size() ) );
697 pWnd->setGeometry( TQRect( m_pMdi->getCascadePoint( m_pDocumentViews->count() - 1 ), defaultChildFrmSize() ) );
701 if ( mdiMode() == KMdi::ToplevelMode )
703 XSetTransientForHint( tqt_xdisplay(), pWnd->winId(), topLevelWidget() ->winId() );
711 if ( mdiMode() == KMdi::ToplevelMode )
713 XSetTransientForHint( tqt_xdisplay(), pWnd->winId(), topLevelWidget() ->winId() );
720 activateView( pWnd );
723 emit childViewIsDetachedNow( pWnd );
733 if ( !( m_pWinList->removeRef( pWnd ) ) )
735 if ( m_pWinList->count() == 0 )
736 m_pCurrentWindow = 0L;
738 TQObject::disconnect( pWnd, TQ_SIGNAL( attachWindow(
KMdiChildView*,
bool ) ),
this, TQ_SLOT( attachWindow(
KMdiChildView*,
bool ) ) );
739 TQObject::disconnect( pWnd, TQ_SIGNAL( detachWindow(
KMdiChildView*,
bool ) ),
this, TQ_SLOT( detachWindow(
KMdiChildView*,
bool ) ) );
740 TQObject::disconnect( pWnd, TQ_SIGNAL( focusInEventOccurs(
KMdiChildView* ) ),
this, TQ_SLOT( activateView(
KMdiChildView* ) ) );
741 TQObject::disconnect( pWnd, TQ_SIGNAL( childWindowCloseRequest(
KMdiChildView* ) ),
this, TQ_SLOT( childWindowCloseRequest(
KMdiChildView* ) ) );
742 TQObject::disconnect( pWnd, TQ_SIGNAL( clickedInWindowMenu(
int ) ),
this, TQ_SLOT( windowMenuItemActivated(
int ) ) );
743 TQObject::disconnect( pWnd, TQ_SIGNAL( clickedInDockMenu(
int ) ),
this, TQ_SLOT( dockMenuItemActivated(
int ) ) );
750 TQObject::disconnect( pWnd, TQ_SIGNAL( tabCaptionChanged(
const TQString& ) ), but, TQ_SLOT( setNewText(
const TQString& ) ) );
752 m_pTaskBar->removeWinButton( pWnd );
755 if ( m_mdiMode == KMdi::TabPageMode )
757 if ( m_pWinList->count() == 0 )
759 if ( !m_pDockbaseAreaOfDocumentViews )
761 m_pDockbaseAreaOfDocumentViews = createDockWidget(
"mdiAreaCover", TQPixmap(), 0L,
"mdi_area_cover" );
762 m_pDockbaseAreaOfDocumentViews->setDockWindowTransient(
this,
true );
764 m_pDockbaseAreaOfDocumentViews->setWidget( m_pMdi );
765 setMainDockWidget( m_pDockbaseAreaOfDocumentViews );
767 m_pDockbaseOfTabPage->setDockSite( KDockWidget::DockFullSite );
768 m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockCenter );
769 m_pDockbaseAreaOfDocumentViews->manualDock( m_pDockbaseOfTabPage, KDockWidget::DockCenter );
770 m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockNone );
771 m_pDockbaseOfTabPage = m_pDockbaseAreaOfDocumentViews;
774 KDockWidget* pDockW = ( KDockWidget* ) pWnd->parentWidget();
775 pWnd->reparent( 0L, TQPoint( 0, 0 ) );
776 pDockW->setWidget( 0L );
777 if ( pDockW == m_pDockbaseOfTabPage )
779 TQTabWidget * pTab = ( TQTabWidget* ) pDockW->parentWidget() ->parentWidget();
780 int cnt = pTab->count();
781 m_pDockbaseOfTabPage = ( KDockWidget* ) pTab->page( cnt - 2 );
782 if ( pDockW == m_pDockbaseOfTabPage )
784 m_pDockbaseOfTabPage = ( KDockWidget* ) pTab->page( cnt - 1 );
788 if ( m_pWinList->count() == 1 )
796 m_pMdi->destroyChildButNotItsView( pWnd->
mdiParent() );
801 if ( m_pMdi->getVisibleChildCount() > 0 )
804 m_pCurrentWindow = 0L;
811 else if ( m_pWinList->count() > 0 )
819 pWnd->m_bToolView =
false;
821 if ( !m_pCurrentWindow )
822 emit lastChildViewClosed();
832 m_pDocumentViews->removeRef( pWnd );
833 if ( m_pDocumentViews->count() == 0 )
834 m_pCurrentWindow = 0L;
838 m_pTaskBar->removeWinButton( pWnd, layoutTaskBar );
841 if ( ( m_mdiMode == KMdi::TabPageMode ) || ( m_mdiMode == KMdi::IDEAlMode ) )
843 if ( !m_documentTabWidget )
845 if ( m_pDocumentViews->count() == 0 )
847 pWnd->reparent( 0L, TQPoint( 0, 0 ) );
848 kdDebug(760) <<
"-------- 1" << endl;
849 if ( m_pDocumentViews->count() == 1 )
851 m_pDocumentViews->last() ->
activate();
854 if ( ( m_mdiMode == KMdi::TabPageMode ) || ( m_mdiMode == KMdi::IDEAlMode ) )
856 if ( m_pDocumentViews->count() == 0 )
858 if ( !m_pDockbaseAreaOfDocumentViews )
860 m_pDockbaseAreaOfDocumentViews = createDockWidget(
"mdiAreaCover", TQPixmap(), 0L,
"mdi_area_cover" );
861 m_pDockbaseAreaOfDocumentViews->setDockWindowTransient(
this,
true );
862 m_pDockbaseAreaOfDocumentViews->setWidget( m_pMdi );
863 setMainDockWidget( m_pDockbaseAreaOfDocumentViews );
866 m_pDockbaseOfTabPage->setDockSite( KDockWidget::DockFullSite );
867 m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockCenter );
868 m_pDockbaseAreaOfDocumentViews->manualDock( m_pDockbaseOfTabPage, KDockWidget::DockCenter );
869 m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockNone );
870 m_pDockbaseOfTabPage = m_pDockbaseAreaOfDocumentViews;
876 KDockWidget* pDockW = ( KDockWidget* ) pWnd->parentWidget();
877 pWnd->reparent( 0L, TQPoint( 0, 0 ) );
878 pDockW->setWidget( 0L );
879 if ( pDockW == m_pDockbaseOfTabPage )
881 TQTabWidget * pTab = ( TQTabWidget* ) pDockW->parentWidget() ->parentWidget();
882 int cnt = pTab->count();
883 m_pDockbaseOfTabPage = ( KDockWidget* ) pTab->page( cnt - 2 );
884 if ( pDockW == m_pDockbaseOfTabPage )
886 m_pDockbaseOfTabPage = ( KDockWidget* ) pTab->page( cnt - 1 );
893 if ( m_pDocumentViews->count() == 1 )
895 m_pDocumentViews->last() ->
activate();
900 m_pMdi->destroyChild( pWnd->
mdiParent() );
906 if ( m_pMdi->getVisibleChildCount() > 0 )
909 m_pCurrentWindow = 0L;
916 else if ( m_pDocumentViews->count() > 0 )
918 if ( m_pDocumentViews->current() )
920 m_pDocumentViews->current() ->activate();
921 m_pDocumentViews->current() ->setFocus();
925 m_pDocumentViews->last() ->activate();
926 m_pDocumentViews->last() ->setFocus();
931 if ( !m_pCurrentWindow )
933 d->closeWindowAction->setEnabled(
false);
934 emit lastChildViewClosed();
941 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
942 for ( ; ( *it ); ++it )
944 if ( ( *it )->caption() == caption )
953 return m_pCurrentWindow;
959 if ( ( as == ToolView ) || ( as == AnyView ) )
961 if ( m_pToolViews->contains( pWnd ) )
963 if ( as == ToolView )
967 if ( m_pDocumentViews->findRef( pWnd ) != -1 )
975 m_pWindowPopup->clear();
976 if ( bIncludeTaskbarPopup )
978 m_pWindowPopup->insertItem( i18n(
"Window" ), taskBarPopup( pWnd,
false ) );
979 m_pWindowPopup->insertSeparator();
981 return m_pWindowPopup;
988 m_pTaskBarPopup->clear();
991 m_pTaskBarPopup->insertItem( i18n(
"Undock" ), pWnd, TQ_SLOT( detach() ) );
992 m_pTaskBarPopup->insertSeparator();
994 m_pTaskBarPopup->insertItem( i18n(
"Restore" ), pWnd, TQ_SLOT( restore() ) );
996 m_pTaskBarPopup->insertItem( i18n(
"Maximize" ), pWnd, TQ_SLOT( maximize() ) );
998 m_pTaskBarPopup->insertItem( i18n(
"Minimize" ), pWnd, TQ_SLOT( minimize() ) );
1001 m_pTaskBarPopup->insertItem( i18n(
"Dock" ), pWnd, TQ_SLOT( attach() ) );
1002 m_pTaskBarPopup->insertSeparator();
1003 m_pTaskBarPopup->insertItem( i18n(
"Close" ), pWnd, TQ_SLOT( close() ) );
1005 m_pTaskBarPopup->insertSeparator();
1006 m_pTaskBarPopup->insertItem( i18n(
"Operations" ), windowPopup( pWnd,
false ) );
1007 return m_pTaskBarPopup;
1010 void KMdiMainFrm::slotDocCurrentChanged( TQWidget* pWidget )
1013 pWnd->m_bMainframesActivateViewIsPending =
true;
1015 bool bActivateNecessary =
true;
1016 if ( m_pCurrentWindow != pWnd )
1017 m_pCurrentWindow = pWnd;
1020 m_pTaskBar->setActiveButton( pWnd );
1022 if ( m_documentTabWidget && ( m_mdiMode == KMdi::TabPageMode || m_mdiMode == KMdi::IDEAlMode ) )
1024 m_documentTabWidget->showPage( pWnd );
1031 if ( bActivateNecessary && ( m_pMdi->topChild() == pWnd->
mdiParent() ) )
1038 if ( bActivateNecessary )
1041 m_pMdi->setTopChild( 0L );
1042 if ( !pWnd->isActiveWindow() )
1043 pWnd->setActiveWindow();
1049 activeWindow()->updateTimeStamp();
1050 emit collapseOverlapContainers();
1051 pWnd->m_bMainframesActivateViewIsPending =
false;
1057 pWnd->m_bMainframesActivateViewIsPending =
true;
1059 bool bActivateNecessary =
true;
1060 if ( m_pCurrentWindow != pWnd )
1061 m_pCurrentWindow = pWnd;
1064 bActivateNecessary =
false;
1067 pWnd->m_bInterruptActivation =
true;
1071 m_pTaskBar->setActiveButton( pWnd );
1073 if ( m_documentTabWidget && m_mdiMode == KMdi::TabPageMode || m_mdiMode == KMdi::IDEAlMode )
1075 m_documentTabWidget->showPage( pWnd );
1082 if ( bActivateNecessary && ( m_pMdi->topChild() == pWnd->
mdiParent() ) )
1089 if ( bActivateNecessary )
1092 m_pMdi->setTopChild( 0L );
1093 if ( !pWnd->isActiveWindow() )
1094 pWnd->setActiveWindow();
1100 emit collapseOverlapContainers();
1102 pWnd->m_bMainframesActivateViewIsPending =
false;
1107 activateView( pWnd );
1109 taskBarPopup( pWnd,
true ) ->popup( TQCursor::pos() );
1115 TQApplication::postEvent(
this, ce );
1120 if ( e->type() == TQEvent::User )
1124 closeWindow( pWnd );
1141 else if ( isVisible() && e->type() == TQEvent::Move )
1143 if ( m_pDragEndTimer->isActive() )
1146 m_pDragEndTimer->stop();
1151 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
1152 for ( ; ( *it ); ++it )
1155 TQApplication::sendEvent( ( *it ), &dragBeginEvent );
1158 m_pDragEndTimer->start( 200,
true );
1161 return DockMainWindow::event( e );
1166 if ( e->type() == TQEvent::Resize && m_mdiMode == KMdi::ToplevelMode )
1168 verifyToplevelHeight();
1172 if ( e->type() == TQEvent::FocusIn )
1174 TQFocusEvent * pFE = ( TQFocusEvent* ) e;
1175 if ( pFE->reason() == TQFocusEvent::ActiveWindow )
1177 if ( m_pCurrentWindow && !m_pCurrentWindow->isHidden() &&
1178 !m_pCurrentWindow->isAttached() && m_pMdi->topChild() )
1185 static bool focusTCIsPending =
false;
1186 if ( !focusTCIsPending && m_mdiMode == KMdi::ChildframeMode )
1188 focusTCIsPending =
true;
1189 m_pMdi->focusTopChild();
1190 focusTCIsPending =
false;
1194 else if ( e->type() == TQEvent::KeyRelease )
1198 TDEAction * a = actionCollection() ->action(
"view_last_window" ) ;
1201 const TDEShortcut cut( a->shortcut() );
1202 const KKeySequence& seq = cut.seq( 0 );
1203 const KKey& key = seq.key( 0 );
1204 int modFlags = key.modFlags();
1205 int state = ( ( TQKeyEvent * ) e ) ->state();
1206 KKey key2( ( TQKeyEvent * ) e );
1212 if ( state != ( ( TQKeyEvent * ) e ) ->stateAfter() &&
1213 ( ( modFlags & KKey::CTRL ) > 0 ) == ( ( state & TQt::ControlButton ) > 0 ) &&
1214 ( ( modFlags & KKey::ALT ) > 0 ) == ( ( state & TQt::AltButton ) > 0 ) &&
1215 ( ( modFlags & KKey::WIN ) > 0 ) == ( ( state & TQt::MetaButton ) > 0 ) )
1217 activeWindow() ->updateTimeStamp();
1218 setSwitching(
false );
1224 kdDebug(760) <<
"TDEAction( \"view_last_window\") not found." << endl;
1237 TQValueList<KMdiChildView*> children;
1238 for (
KMdiChildView * w = m_pDocumentViews->first();w;w = m_pDocumentViews->next() )
1240 children.append( w );
1242 TQValueListIterator<KMdiChildView *> childIt;
1243 for ( childIt = children.begin(); childIt != children.end(); ++childIt )
1245 ( *childIt )->close();
1255 kdDebug(760) << k_funcinfo <<
"minimizing all the views" << endl;
1256 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
1257 for ( ; ( *it ); ++it )
1258 ( *it )->minimize();
1266 kdDebug(760) << k_funcinfo <<
"closing the active view" << endl;
1267 if ( m_pCurrentWindow )
1268 m_pCurrentWindow->close();
1275 if ( !rootDockWidgetList && !positionList )
1279 const int frameBorderWidth = 7;
1280 const int windowTitleHeight = 10;
1282 TQObjectList* pObjList = queryList(
"KDockWidget" );
1283 if ( pObjList->isEmpty() )
1284 pObjList = queryList(
"KDockWidget_Compat::KDockWidget" );
1286 TQObjectListIt it( *pObjList );
1290 KDockWidget* dockWindow = 0L;
1291 KDockWidget* rootDockWindow = 0L;
1292 KDockWidget* undockCandidate = 0L;
1293 TQWidget* pW =
static_cast<TQWidget*
>( ( *it ) );
1296 while ( !pW->isTopLevel() )
1298 if ( ::tqt_cast<KDockWidget*>( pW ) || pW->inherits(
"KDockWidget_Compat::KDockWidget" ) )
1300 undockCandidate =
static_cast<KDockWidget*
>( pW );
1301 if ( undockCandidate->enableDocking() != KDockWidget::DockNone )
1302 rootDockWindow = undockCandidate;
1304 pW = pW->parentWidget();
1307 if ( rootDockWindow )
1311 if ( !rootDockWidgetList->isEmpty() )
1313 TQPtrListIterator<KDockWidget> it2( *rootDockWidgetList );
1314 for ( ; it2.current() && !found; ++it2 )
1316 dockWindow = it2.current();
1317 if ( dockWindow == rootDockWindow )
1322 if ( !found || rootDockWidgetList->isEmpty() )
1324 rootDockWidgetList->append( dockWindow );
1325 kdDebug(760) << k_funcinfo <<
"Appending " << rootDockWindow <<
" to our list of " <<
1326 "root dock windows" << endl;
1327 TQPoint p = rootDockWindow->mapToGlobal( rootDockWindow->pos() ) - rootDockWindow->pos();
1328 TQRect r( p.x(), p.y() + m_undockPositioningOffset.y(),
1329 rootDockWindow->width() - windowTitleHeight - frameBorderWidth * 2,
1330 rootDockWindow->height() - windowTitleHeight - frameBorderWidth * 2 );
1331 positionList->append( r );
1344 if ( m_mdiMode == KMdi::ToplevelMode )
1346 emit mdiModeHasBeenChangedTo( KMdi::ToplevelMode );
1350 KMdi::MdiMode oldMdiMode = m_mdiMode;
1352 const int frameBorderWidth = 7;
1353 setUndockPositioningOffset( TQPoint( 0, ( m_pTaskBar ? m_pTaskBar->height() : 0 ) + frameBorderWidth ) );
1356 TQPtrList<KDockWidget> rootDockWidgetList;
1357 TQValueList<TQRect> positionList;
1360 switch( oldMdiMode )
1362 case KMdi::ChildframeMode:
1363 finishChildframeMode();
1365 case KMdi::TabPageMode:
1366 finishTabPageMode();
1368 case KMdi::IDEAlMode:
1370 findRootDockWidgets( &rootDockWidgetList, &positionList );
1377 TQPtrListIterator<KDockWidget> kdwit( rootDockWidgetList );
1378 for ( ; ( *kdwit ); ++kdwit )
1379 ( *kdwit )->undock();
1382 if ( oldMdiMode == KMdi::TabPageMode || oldMdiMode == KMdi::IDEAlMode )
1384 if ( !m_pDockbaseAreaOfDocumentViews )
1386 m_pDockbaseAreaOfDocumentViews = createDockWidget(
"mdiAreaCover", TQPixmap(), 0L,
"mdi_area_cover" );
1387 m_pDockbaseAreaOfDocumentViews->setDockWindowTransient(
this,
true );
1388 m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockNone );
1389 m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockCorner );
1390 m_pDockbaseAreaOfDocumentViews->setWidget( m_pMdi );
1393 setView( m_pDockbaseAreaOfDocumentViews );
1394 setMainDockWidget( m_pDockbaseAreaOfDocumentViews );
1397 if ( !parentWidget() )
1402 int topDockHeight = topDock() ? topDock()->height() : 0;
1403 int bottomDockHeight = bottomDock() ? bottomDock()->height() : 0;
1404 int menuBarHeight = hasMenuBar() ? menuBar()->height() : 0;
1405 if ( m_pDocumentViews->count() != 0 )
1406 setFixedHeight( height() - m_pDockbaseAreaOfDocumentViews->height() );
1409 kdDebug(760) << k_funcinfo <<
"height is: " << height() << endl;
1410 kdDebug(760) << k_funcinfo <<
"top dock height: " << topDockHeight << endl;
1411 kdDebug(760) << k_funcinfo <<
"bottom dock height: " << bottomDockHeight << endl;
1412 kdDebug(760) << k_funcinfo <<
"menu bar height: " << menuBarHeight << endl;
1413 kdDebug(760) << k_funcinfo <<
"dock base area height: " << m_pDockbaseAreaOfDocumentViews->height() << endl;
1414 setFixedHeight( topDockHeight + menuBarHeight );
1420 TQPtrListIterator<KMdiChildView> tdemdicvit( *m_pDocumentViews );
1421 for ( tdemdicvit.toFirst(); ( *tdemdicvit ); ++tdemdicvit )
1424 XSetTransientForHint( tqt_xdisplay(), ( *tdemdicvit )->winId(), winId() );
1426 ( *tdemdicvit )->show();
1430 TQValueList<TQRect>::Iterator qvlqrit;
1431 TQValueList<TQRect>::Iterator qvlEnd = positionList.end();
1432 for ( tdemdicvit.toFirst(), qvlqrit = positionList.begin() ; ( *tdemdicvit ) && qvlqrit != qvlEnd; ++tdemdicvit, ++qvlqrit )
1434 ( *tdemdicvit )->setGeometry( ( *qvlqrit ) );
1435 ( *tdemdicvit )->show();
1438 m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockNone );
1439 m_mdiMode = KMdi::ToplevelMode;
1441 kdDebug(760) << k_funcinfo <<
"Switch to toplevel mode completed" << endl;
1442 emit mdiModeHasBeenChangedTo( KMdi::ToplevelMode );
1446 void KMdiMainFrm::finishToplevelMode()
1448 m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockCorner );
1456 if ( m_mdiMode == KMdi::ChildframeMode )
1458 emit mdiModeHasBeenChangedTo( KMdi::ChildframeMode );
1462 TQPtrList<KDockWidget> rootDockWidgetList;
1463 TQValueList<TQRect> positionList;
1465 if ( m_mdiMode == KMdi::TabPageMode )
1467 kdDebug(760) << k_funcinfo <<
"finishing tab page mode" << endl;
1469 findRootDockWidgets( &rootDockWidgetList, &positionList );
1470 kdDebug(760) << k_funcinfo <<
"Found " << rootDockWidgetList.count() <<
" widgets to undock" << endl;
1473 TQPtrListIterator<KDockWidget> it( rootDockWidgetList );
1474 for ( ; ( *it ) ; ++it )
1477 finishTabPageMode();
1479 else if ( m_mdiMode == KMdi::ToplevelMode )
1481 finishToplevelMode();
1483 else if ( m_mdiMode == KMdi::IDEAlMode )
1485 kdDebug(760) << k_funcinfo <<
"finishing ideal mode" << endl;
1486 finishIDEAlMode(
false );
1489 findRootDockWidgets( &rootDockWidgetList, &positionList );
1490 kdDebug(760) << k_funcinfo <<
"Found " << rootDockWidgetList.count() <<
" widgets to undock" << endl;
1493 TQPtrListIterator<KDockWidget> it( rootDockWidgetList );
1494 for ( ; ( *it ) ; ++it )
1497 m_mdiMode = KMdi::TabPageMode;
1498 finishTabPageMode();
1499 m_mdiMode = KMdi::IDEAlMode;
1502 if ( !m_pDockbaseAreaOfDocumentViews )
1505 m_pDockbaseAreaOfDocumentViews = createDockWidget(
"mdiAreaCover", TQPixmap(), 0L,
"mdi_area_cover" );
1506 m_pDockbaseAreaOfDocumentViews->setDockWindowTransient(
this,
true );
1507 m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockNone );
1508 m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockCorner );
1509 m_pDockbaseAreaOfDocumentViews->setWidget( m_pMdi );
1510 kdDebug(760) << k_funcinfo <<
"childarea is now covered by a dockwidget" << endl;
1513 if ( m_pDockbaseAreaOfDocumentViews->isTopLevel() )
1516 setView( m_pDockbaseAreaOfDocumentViews );
1517 setMainDockWidget( m_pDockbaseAreaOfDocumentViews );
1518 m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockNone );
1519 m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockCorner );
1520 kdDebug(760) << k_funcinfo <<
"Dock base area has been set to the main view" << endl;
1522 m_pDockbaseAreaOfDocumentViews->setWidget( m_pMdi );
1523 m_pDockbaseAreaOfDocumentViews->show();
1525 if ( ( m_mdiMode == KMdi::TabPageMode ) || ( m_mdiMode == KMdi::IDEAlMode ) )
1527 kdDebug(760) << k_funcinfo <<
"trying to dock back the undock toolviews" << endl;
1528 TQPtrListIterator<KDockWidget> it( rootDockWidgetList );
1529 for ( ; ( *it ); ++it )
1530 ( *it )->dockBack();
1533 if ( m_mdiMode == KMdi::ToplevelMode && m_pTempDockSession )
1536 kdDebug(760) << k_funcinfo <<
"Restoring old dock scenario memorized from toplevel mode" << endl;
1537 TQDomElement oldDockState = m_pTempDockSession->namedItem(
"cur_dock_state" ).toElement();
1538 readDockConfig( oldDockState );
1541 KMdi::MdiMode oldMdiMode = m_mdiMode;
1542 m_mdiMode = KMdi::ChildframeMode;
1545 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
1546 for ( ; ( *it ); ++it )
1550 attachWindow( pView,
true );
1552 for ( it.toFirst(); ( *it ); ++it )
1558 if ( ( oldMdiMode == KMdi::ToplevelMode ) && !parentWidget() )
1560 setMinimumHeight( m_oldMainFrmMinHeight );
1561 setMaximumHeight( m_oldMainFrmMaxHeight );
1562 resize( width(), m_oldMainFrmHeight );
1563 m_oldMainFrmHeight = 0;
1564 kdDebug(760) << k_funcinfo <<
"left top level mode completely" << endl;
1565 emit leftTopLevelMode();
1567 emit mdiModeHasBeenChangedTo( KMdi::ChildframeMode );
1570 void KMdiMainFrm::finishChildframeMode()
1573 kdDebug(760) << k_funcinfo <<
"saving the current dock scenario" << endl;
1574 delete m_pTempDockSession;
1575 m_pTempDockSession =
new TQDomDocument(
"docksession" );
1576 TQDomElement curDockState = m_pTempDockSession->createElement(
"cur_dock_state" );
1577 m_pTempDockSession->appendChild( curDockState );
1578 writeDockConfig( curDockState );
1581 kdDebug(760) << k_funcinfo <<
"detaching all document views and moving them to toplevel" << endl;
1582 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
1583 for ( ; ( *it ); ++it )
1591 pView->
mdiParent()->setGeometry( 0, 0, m_pMdi->width(), m_pMdi->height() );
1592 detachWindow( pView,
false );
1602 if ( m_mdiMode == KMdi::TabPageMode )
1604 emit mdiModeHasBeenChangedTo( KMdi::TabPageMode );
1610 case KMdi::ChildframeMode:
1611 finishChildframeMode();
1613 case KMdi::ToplevelMode:
1614 finishToplevelMode();
1616 case KMdi::IDEAlMode:
1617 finishIDEAlMode(
false );
1618 emit mdiModeHasBeenChangedTo( KMdi::TabPageMode );
1619 m_mdiMode = KMdi::TabPageMode;
1626 setupTabbedDocumentViewSpace();
1627 m_mdiMode = KMdi::TabPageMode;
1628 if ( m_pCurrentWindow )
1629 m_pCurrentWindow->setFocus();
1631 m_pTaskBar->switchOn(
false );
1635 TQObject::connect( m_pClose, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( closeViewButtonPressed() ) );
1636 if ( m_pDocumentViews->count() > 0 )
1640 kdDebug(760) <<
"close button nonexistant. strange things might happen" << endl;
1642 kdDebug(760) <<
"Switch to tab page mode complete" << endl;
1643 emit mdiModeHasBeenChangedTo( KMdi::TabPageMode );
1646 void KMdiMainFrm::finishTabPageMode()
1649 if ( m_mdiMode == KMdi::TabPageMode )
1652 TQObject::disconnect( m_pClose, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( closeViewButtonPressed() ) );
1654 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
1655 for ( ; it.current(); ++it )
1660 kdDebug(760) <<
"KMdiMainFrm::finishTabPageMode: in loop" << endl;
1661 TQSize mins = pView->minimumSize();
1662 TQSize maxs = pView->maximumSize();
1663 TQSize sz = pView->size();
1664 TQWidget* pParent = pView->parentWidget();
1665 TQPoint p( pParent->mapToGlobal( pParent->pos() ) - pParent->pos() + m_undockPositioningOffset );
1666 m_documentTabWidget->removePage( pView );
1667 pView->reparent( 0, 0, p );
1669 pView->resize( sz );
1679 delete m_documentTabWidget;
1680 m_documentTabWidget = 0;
1681 m_pTaskBar->switchOn(
true );
1687 void KMdiMainFrm::setupTabbedDocumentViewSpace()
1690 if ( ( m_mdiMode == KMdi::ToplevelMode ) && !parentWidget() )
1692 setMinimumHeight( m_oldMainFrmMinHeight );
1693 setMaximumHeight( m_oldMainFrmMaxHeight );
1694 resize( width(), m_oldMainFrmHeight );
1695 m_oldMainFrmHeight = 0;
1697 emit leftTopLevelMode();
1698 TQApplication::sendPostedEvents();
1701 if ( m_pTempDockSession )
1703 TQDomElement oldDockState = m_pTempDockSession->namedItem(
"cur_dock_state" ).toElement();
1704 readDockConfig( oldDockState );
1709 if ( m_pDockbaseOfTabPage != m_pDockbaseAreaOfDocumentViews )
1711 delete m_pDockbaseOfTabPage;
1712 m_pDockbaseOfTabPage = m_pDockbaseAreaOfDocumentViews;
1715 delete m_documentTabWidget;
1717 connect( m_documentTabWidget, TQ_SIGNAL( currentChanged( TQWidget* ) ),
this, TQ_SLOT( slotDocCurrentChanged( TQWidget* ) ) );
1718 m_pDockbaseAreaOfDocumentViews->setWidget( m_documentTabWidget );
1719 m_documentTabWidget->show();
1720 TQPtrListIterator<KMdiChildView> it4( *m_pDocumentViews );
1721 for ( ; it4.current(); ++it4 )
1724 m_documentTabWidget->addTab( pView, pView->icon() ? *( pView->icon() ) : TQPixmap(), pView->
tabCaption() );
1729 connect( pView, TQ_SIGNAL( iconUpdated( TQWidget*, TQPixmap ) ), m_documentTabWidget, TQ_SLOT( updateIconInView( TQWidget*, TQPixmap ) ) );
1730 connect( pView, TQ_SIGNAL( captionUpdated( TQWidget*,
const TQString& ) ), m_documentTabWidget, TQ_SLOT( updateCaptionInView( TQWidget*,
const TQString& ) ) );
1738 d->m_styleIDEAlMode = flags;
1739 if ( m_leftContainer )
1741 KMdiDockContainer * tmpL = ::tqt_cast<KMdiDockContainer*>( m_leftContainer->getWidget() );
1743 tmpL->setStyle( flags );
1746 if ( m_rightContainer )
1748 KMdiDockContainer * tmpR = ::tqt_cast<KMdiDockContainer*>( m_rightContainer->getWidget() );
1750 tmpR->setStyle( flags );
1753 if ( m_topContainer )
1755 KMdiDockContainer * tmpT = ::tqt_cast<KMdiDockContainer*>( m_topContainer->getWidget() );
1757 tmpT->setStyle( flags );
1760 if ( m_bottomContainer )
1762 KMdiDockContainer * tmpB = ::tqt_cast<KMdiDockContainer*>( m_bottomContainer->getWidget() );
1764 tmpB->setStyle( flags );
1770 if ( m_mdiMode == KMdi::IDEAlMode )
1772 setIDEAlModeStyle( flag );
1774 d->m_toolviewStyle = flag;
1775 bool toolviewExists =
false;
1776 TQMap<TQWidget*, KMdiToolViewAccessor*>::Iterator it;
1777 for ( it = m_pToolViews->begin(); it != m_pToolViews->end(); ++it )
1779 KDockWidget *dockWidget =
dynamic_cast<KDockWidget*
>( it.data()->wrapperWidget() );
1785 dockWidget->setTabPageLabel( TQString::null );
1786 dockWidget->setPixmap( *( it.data()->wrappedWidget()->icon() ) );
1789 dockWidget->setPixmap();
1790 dockWidget->setTabPageLabel( it.data()->wrappedWidget()->caption() );
1793 dockWidget->setPixmap( *( it.data()->wrappedWidget()->icon() ) );
1794 dockWidget->setTabPageLabel( it.data()->wrappedWidget()->caption() );
1798 toolviewExists =
true;
1802 if ( toolviewExists )
1823 kdDebug(760) << k_funcinfo <<
"switching to IDEAl mode" << endl;
1825 if ( m_mdiMode == KMdi::IDEAlMode )
1827 emit mdiModeHasBeenChangedTo( KMdi::IDEAlMode );
1833 case KMdi::ChildframeMode:
1834 finishChildframeMode();
1836 case KMdi::ToplevelMode:
1837 finishToplevelMode();
1839 case KMdi::TabPageMode:
1840 m_mdiMode = KMdi::IDEAlMode;
1841 setupToolViewsForIDEALMode();
1842 emit mdiModeHasBeenChangedTo( KMdi::IDEAlMode );
1849 setupTabbedDocumentViewSpace();
1850 m_mdiMode = KMdi::IDEAlMode;
1851 setupToolViewsForIDEALMode();
1853 if ( m_pCurrentWindow )
1854 m_pCurrentWindow->setFocus();
1856 m_pTaskBar->switchOn(
false );
1860 TQObject::connect( m_pClose, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( closeViewButtonPressed() ) );
1861 if ( m_pDocumentViews->count() > 0 )
1865 kdWarning(760) << k_funcinfo <<
"close button pointer does not exist!" << endl;
1867 kdDebug(760) << k_funcinfo <<
"switch to IDEAl mode complete" << endl;
1869 emit mdiModeHasBeenChangedTo( KMdi::IDEAlMode );
1873 void KMdiMainFrm::dockToolViewsIntoContainers( TQPtrList<KDockWidget>& widgetsToReparent, KDockWidget *container )
1875 TQPtrListIterator<KDockWidget> it( widgetsToReparent );
1876 for ( ; ( *it ); ++it )
1878 ( *it )->manualDock( container, KDockWidget::DockCenter, 20 );
1879 ( *it )->loseFormerBrotherDockWidget();
1883 void KMdiMainFrm::findToolViewsDockedToMain( TQPtrList<KDockWidget>* list, KDockWidget::DockPosition dprtmw )
1885 KDockWidget* mainDock = getMainDockWidget();
1886 if ( mainDock->parentDockTabGroup() )
1888 mainDock =
dynamic_cast<KDockWidget*
>( mainDock->parentDockTabGroup()->parent() );
1894 kdDebug(760) << k_funcinfo <<
"mainDock invalid. No main dock widget found." << endl;
1898 KDockWidget* widget = mainDock->findNearestDockWidget( dprtmw );
1899 if ( widget && widget->parentDockTabGroup() )
1901 widget =
static_cast<KDockWidget*
>( widget->parentDockTabGroup() ->parent() );
1905 KDockTabGroup* tg =
dynamic_cast<KDockTabGroup*
>( widget->getWidget() );
1908 kdDebug(760) << k_funcinfo <<
"KDockTabGroup found" << endl;
1909 for (
int i = 0;i < tg->count();i++ )
1910 list->append(
static_cast<KDockWidget*
>( tg->page( i ) ) );
1913 list->append( widget );
1916 kdDebug(760) << k_funcinfo <<
"no widget found" << endl;
1919 kdDebug(760) <<
"No main dock widget found" << endl;
1923 void KMdiMainFrm::setupToolViewsForIDEALMode()
1925 m_leftContainer = createDockWidget(
"KMdiDock::leftDock", SmallIcon(
"misc" ), 0L,
"Left Dock" );
1926 m_rightContainer = createDockWidget(
"KMdiDock::rightDock", SmallIcon(
"misc" ), 0L,
"Right Dock" );
1927 m_topContainer = createDockWidget(
"KMdiDock::topDock", SmallIcon(
"misc" ), 0L,
"Top Dock" );
1928 m_bottomContainer = createDockWidget(
"KMdiDock::bottomDock", SmallIcon(
"misc" ), 0L,
"Bottom Dock" );
1930 KDockWidget *mainDock = getMainDockWidget();
1931 KDockWidget *w = mainDock;
1932 if ( mainDock->parentDockTabGroup() )
1933 w =
static_cast<KDockWidget*
>( mainDock->parentDockTabGroup()->parent() );
1935 TQPtrList<KDockWidget> leftReparentWidgets;
1936 TQPtrList<KDockWidget> rightReparentWidgets;
1937 TQPtrList<KDockWidget> bottomReparentWidgets;
1938 TQPtrList<KDockWidget> topReparentWidgets;
1940 if ( mainDock->parentDockTabGroup() )
1941 mainDock =
static_cast<KDockWidget*
>( mainDock->parentDockTabGroup() ->parent() );
1943 findToolViewsDockedToMain( &leftReparentWidgets, KDockWidget::DockLeft );
1944 findToolViewsDockedToMain( &rightReparentWidgets, KDockWidget::DockRight );
1945 findToolViewsDockedToMain( &bottomReparentWidgets, KDockWidget::DockBottom );
1946 findToolViewsDockedToMain( &topReparentWidgets, KDockWidget::DockTop );
1948 mainDock->setEnableDocking( KDockWidget::DockNone );
1949 mainDock->setDockSite( KDockWidget::DockCorner );
1952 KMdiDockContainer *tmpDC;
1953 m_leftContainer->setWidget( tmpDC =
new KMdiDockContainer( m_leftContainer,
this, KDockWidget::DockLeft, d->m_styleIDEAlMode ) );
1954 m_leftContainer->setEnableDocking( KDockWidget::DockLeft );
1955 m_leftContainer->manualDock( mainDock, KDockWidget::DockLeft, 20 );
1957 if ( m_mdiGUIClient )
1958 connect (
this, TQ_SIGNAL( toggleLeft() ), tmpDC, TQ_SLOT( toggle() ) );
1959 connect(
this, TQ_SIGNAL( collapseOverlapContainers() ), tmpDC, TQ_SLOT( collapseOverlapped() ) );
1960 connect( tmpDC, TQ_SIGNAL( activated( KMdiDockContainer* ) ),
this, TQ_SLOT( setActiveToolDock( KMdiDockContainer* ) ) );
1961 connect( tmpDC, TQ_SIGNAL( deactivated( KMdiDockContainer* ) ),
this, TQ_SLOT( removeFromActiveDockList( KMdiDockContainer* ) ) );
1963 m_rightContainer->setWidget( tmpDC =
new KMdiDockContainer( m_rightContainer,
this, KDockWidget::DockRight, d->m_styleIDEAlMode ) );
1964 m_rightContainer->setEnableDocking( KDockWidget::DockRight );
1965 m_rightContainer->manualDock( mainDock, KDockWidget::DockRight, 80 );
1967 if ( m_mdiGUIClient )
1968 connect (
this, TQ_SIGNAL( toggleRight() ), tmpDC, TQ_SLOT( toggle() ) );
1969 connect(
this, TQ_SIGNAL( collapseOverlapContainers() ), tmpDC, TQ_SLOT( collapseOverlapped() ) );
1970 connect( tmpDC, TQ_SIGNAL( activated( KMdiDockContainer* ) ),
this, TQ_SLOT( setActiveToolDock( KMdiDockContainer* ) ) );
1971 connect( tmpDC, TQ_SIGNAL( deactivated( KMdiDockContainer* ) ),
this, TQ_SLOT( removeFromActiveDockList( KMdiDockContainer* ) ) );
1973 m_topContainer->setWidget( tmpDC =
new KMdiDockContainer( m_topContainer,
this, KDockWidget::DockTop, d->m_styleIDEAlMode ) );
1974 m_topContainer->setEnableDocking( KDockWidget::DockTop );
1975 m_topContainer->manualDock( mainDock, KDockWidget::DockTop, 20 );
1977 if ( m_mdiGUIClient )
1978 connect (
this, TQ_SIGNAL( toggleTop() ), tmpDC, TQ_SLOT( toggle() ) );
1979 connect(
this, TQ_SIGNAL( collapseOverlapContainers() ), tmpDC, TQ_SLOT( collapseOverlapped() ) );
1980 connect( tmpDC, TQ_SIGNAL( activated( KMdiDockContainer* ) ),
this, TQ_SLOT( setActiveToolDock( KMdiDockContainer* ) ) );
1981 connect( tmpDC, TQ_SIGNAL( deactivated( KMdiDockContainer* ) ),
this, TQ_SLOT( removeFromActiveDockList( KMdiDockContainer* ) ) );
1983 m_bottomContainer->setWidget( tmpDC =
new KMdiDockContainer( m_bottomContainer,
this, KDockWidget::DockBottom, d->m_styleIDEAlMode ) );
1984 m_bottomContainer->setEnableDocking( KDockWidget::DockBottom );
1985 m_bottomContainer->manualDock( mainDock, KDockWidget::DockBottom, 80 );
1987 if ( m_mdiGUIClient )
1988 connect (
this, TQ_SIGNAL( toggleBottom() ), tmpDC, TQ_SLOT( toggle() ) );
1989 connect(
this, TQ_SIGNAL( collapseOverlapContainers() ), tmpDC, TQ_SLOT( collapseOverlapped() ) );
1990 connect( tmpDC, TQ_SIGNAL( activated( KMdiDockContainer* ) ),
this, TQ_SLOT( setActiveToolDock( KMdiDockContainer* ) ) );
1991 connect( tmpDC, TQ_SIGNAL( deactivated( KMdiDockContainer* ) ),
this, TQ_SLOT( removeFromActiveDockList( KMdiDockContainer* ) ) );
1993 m_leftContainer->setDockSite( KDockWidget::DockCenter );
1994 m_rightContainer->setDockSite( KDockWidget::DockCenter );
1995 m_topContainer->setDockSite( KDockWidget::DockCenter );
1996 m_bottomContainer->setDockSite( KDockWidget::DockCenter );
1998 dockToolViewsIntoContainers( leftReparentWidgets, m_leftContainer );
1999 dockToolViewsIntoContainers( rightReparentWidgets, m_rightContainer );
2000 dockToolViewsIntoContainers( bottomReparentWidgets, m_bottomContainer );
2001 dockToolViewsIntoContainers( topReparentWidgets, m_topContainer );
2004 dockManager->setSpecialLeftDockContainer( m_leftContainer );
2005 dockManager->setSpecialRightDockContainer( m_rightContainer );
2006 dockManager->setSpecialTopDockContainer( m_topContainer );
2007 dockManager->setSpecialBottomDockContainer( m_bottomContainer );
2010 ( ( KMdiDockContainer* ) ( m_leftContainer->getWidget() ) ) ->hideIfNeeded();
2011 ( ( KMdiDockContainer* ) ( m_rightContainer->getWidget() ) ) ->hideIfNeeded();
2012 ( ( KMdiDockContainer* ) ( m_topContainer->getWidget() ) ) ->hideIfNeeded();
2013 ( ( KMdiDockContainer* ) ( m_bottomContainer->getWidget() ) ) ->hideIfNeeded();
2019 void KMdiMainFrm::finishIDEAlMode(
bool full )
2022 if ( m_mdiMode == KMdi::IDEAlMode )
2026 TQObject::disconnect( m_pClose, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( closeViewButtonPressed() ) );
2029 TQStringList leftNames;
2030 leftNames = prepareIdealToTabs( m_leftContainer );
2031 int leftWidth = m_leftContainer->width();
2033 TQStringList rightNames;
2034 rightNames = prepareIdealToTabs( m_rightContainer );
2035 int rightWidth = m_rightContainer->width();
2037 TQStringList topNames;
2038 topNames = prepareIdealToTabs( m_topContainer );
2039 int topHeight = m_topContainer->height();
2041 TQStringList bottomNames;
2042 bottomNames = prepareIdealToTabs( m_bottomContainer );
2043 int bottomHeight = m_bottomContainer->height();
2046 kdDebug(760) <<
"leftNames" << leftNames << endl;
2047 kdDebug(760) <<
"rightNames" << rightNames << endl;
2048 kdDebug(760) <<
"topNames" << topNames << endl;
2049 kdDebug(760) <<
"bottomNames" << bottomNames << endl;
2051 delete m_leftContainer;
2052 m_leftContainer = 0;
2053 delete m_rightContainer;
2054 m_rightContainer = 0;
2055 delete m_bottomContainer;
2056 m_bottomContainer = 0;
2057 delete m_topContainer;
2061 idealToolViewsToStandardTabs( bottomNames, KDockWidget::DockBottom, bottomHeight );
2062 idealToolViewsToStandardTabs( leftNames, KDockWidget::DockLeft, leftWidth );
2063 idealToolViewsToStandardTabs( rightNames, KDockWidget::DockRight, rightWidth );
2064 idealToolViewsToStandardTabs( topNames, KDockWidget::DockTop, topHeight );
2066 TQApplication::sendPostedEvents();
2071 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
2072 for ( ; it.current(); ++it )
2077 TQSize mins = pView->minimumSize();
2078 TQSize maxs = pView->maximumSize();
2079 TQSize sz = pView->size();
2080 TQWidget* pParent = pView->parentWidget();
2081 TQPoint p( pParent->mapToGlobal( pParent->pos() ) - pParent->pos() + m_undockPositioningOffset );
2082 pView->reparent( 0, 0, p );
2083 pView->reparent( 0, 0, p );
2084 pView->resize( sz );
2087 KDockWidget* pDockW = 0L;
2091 if ( pParent->inherits(
"KDockWidget" ) || pParent->inherits(
"KDockWidget_Compat::KDockWidget" ) )
2093 pDockW = ( KDockWidget* ) pParent;
2095 if ( pParent != m_pDockbaseAreaOfDocumentViews )
2103 pParent = pParent->parentWidget();
2106 while ( pParent && !pDockW );
2107 if ( centralWidget() == pParent )
2109 setCentralWidget( 0L );
2112 m_pTaskBar->switchOn(
true );
2118 TQStringList KMdiMainFrm::prepareIdealToTabs( KDockWidget* container )
2120 KDockContainer * pDW =
dynamic_cast<KDockContainer*
>( container->getWidget() );
2121 TQStringList widgetNames = ( ( KMdiDockContainer* ) pDW ) ->containedWidgets();
2122 for ( TQStringList::iterator it = widgetNames.begin();it != widgetNames.end();++it )
2124 KDockWidget* dw = ( KDockWidget* ) manager() ->getDockWidgetFromName( *it );
2126 dw->setLatestKDockContainer( 0 );
2127 dw->loseFormerBrotherDockWidget();
2132 void KMdiMainFrm::idealToolViewsToStandardTabs( TQStringList widgetNames, KDockWidget::DockPosition pos,
int size )
2136 KDockWidget * mainDock = getMainDockWidget();
2137 if ( mainDock->parentDockTabGroup() )
2139 mainDock =
static_cast<KDockWidget*
>( mainDock->parentDockTabGroup() ->parent() );
2142 if ( widgetNames.count() > 0 )
2144 TQStringList::iterator it = widgetNames.begin();
2145 KDockWidget *dwpd = manager() ->getDockWidgetFromName( *it );
2148 kdDebug(760) <<
"Fatal error in finishIDEAlMode" << endl;
2151 dwpd->manualDock( mainDock, pos, 20 );
2153 for ( ;it != widgetNames.end();++it )
2155 KDockWidget *tmpdw = manager() ->getDockWidgetFromName( *it );
2158 kdDebug(760) <<
"Fatal error in finishIDEAlMode" << endl;
2161 tmpdw->manualDock( dwpd, KDockWidget::DockCenter, 20 );
2165 TQWidget *wid = dwpd->parentDockTabGroup();
2168 wid->setGeometry( 0, 0, 20, 20 );
2189 if ( m_bSDIApplication )
2192 m_pMainMenuBar = pMenuBar;
2193 if ( m_pMainMenuBar == 0L )
2197 m_pUndock =
new TQToolButton( pMenuBar );
2199 m_pRestore =
new TQToolButton( pMenuBar );
2201 m_pMinimize =
new TQToolButton( pMenuBar );
2203 m_pClose =
new TQToolButton( pMenuBar );
2204 m_pUndock->setAutoRaise(
false );
2205 m_pMinimize->setAutoRaise(
false );
2206 m_pRestore->setAutoRaise(
false );
2207 m_pClose->setAutoRaise(
false );
2209 setSysButtonsAtMenuPosition();
2211 delete m_pUndockButtonPixmap;
2212 delete m_pMinButtonPixmap;
2213 delete m_pRestoreButtonPixmap;
2214 delete m_pCloseButtonPixmap;
2216 if ( frameDecorOfAttachedViews() == KMdi::Win95Look )
2218 m_pUndockButtonPixmap =
new TQPixmap( win_undockbutton );
2219 m_pMinButtonPixmap =
new TQPixmap( win_minbutton );
2220 m_pRestoreButtonPixmap =
new TQPixmap( win_restorebutton );
2221 m_pCloseButtonPixmap =
new TQPixmap( win_closebutton );
2223 else if ( frameDecorOfAttachedViews() == KMdi::KDE1Look )
2225 m_pUndockButtonPixmap =
new TQPixmap( kde_undockbutton );
2226 m_pMinButtonPixmap =
new TQPixmap( kde_minbutton );
2227 m_pRestoreButtonPixmap =
new TQPixmap( kde_restorebutton );
2228 m_pCloseButtonPixmap =
new TQPixmap( kde_closebutton );
2229 m_pUndock->setAutoRaise(
true );
2230 m_pMinimize->setAutoRaise(
true );
2231 m_pRestore->setAutoRaise(
true );
2232 m_pClose->setAutoRaise(
true );
2234 else if ( frameDecorOfAttachedViews() == KMdi::KDELook )
2236 m_pUndockButtonPixmap =
new TQPixmap( kde2_undockbutton );
2237 m_pMinButtonPixmap =
new TQPixmap( kde2_minbutton );
2238 m_pRestoreButtonPixmap =
new TQPixmap( kde2_restorebutton );
2239 m_pCloseButtonPixmap =
new TQPixmap( kde2_closebutton );
2243 m_pUndockButtonPixmap =
new TQPixmap( kde2laptop_undockbutton );
2244 m_pMinButtonPixmap =
new TQPixmap( kde2laptop_minbutton );
2245 m_pRestoreButtonPixmap =
new TQPixmap( kde2laptop_restorebutton );
2246 m_pCloseButtonPixmap =
new TQPixmap( kde2laptop_closebutton );
2250 m_pMinimize->hide();
2254 m_pUndock->setPixmap( *m_pUndockButtonPixmap );
2255 m_pMinimize->setPixmap( *m_pMinButtonPixmap );
2256 m_pRestore->setPixmap( *m_pRestoreButtonPixmap );
2257 m_pClose->setPixmap( *m_pCloseButtonPixmap );
2262 if ( m_pMainMenuBar == 0L )
2264 if ( m_pMainMenuBar->parentWidget() == 0L )
2267 int menuW = m_pMainMenuBar->parentWidget() ->width();
2270 if ( frameDecorOfAttachedViews() == KMdi::Win95Look )
2272 else if ( frameDecorOfAttachedViews() == KMdi::KDE1Look )
2274 else if ( frameDecorOfAttachedViews() == KMdi::KDELook )
2278 y = m_pMainMenuBar->height() / 2 - h / 2;
2280 if ( frameDecorOfAttachedViews() == KMdi::KDELaptopLook )
2283 m_pUndock->setGeometry( ( menuW - ( w * 3 ) - 5 ), y, w, h );
2284 m_pMinimize->setGeometry( ( menuW - ( w * 2 ) - 5 ), y, w, h );
2285 m_pRestore->setGeometry( ( menuW - w - 5 ), y, w, h );
2289 m_pUndock->setGeometry( ( menuW - ( h * 4 ) - 5 ), y, h, h );
2290 m_pMinimize->setGeometry( ( menuW - ( h * 3 ) - 5 ), y, h, h );
2291 m_pRestore->setGeometry( ( menuW - ( h * 2 ) - 5 ), y, h, h );
2292 m_pClose->setGeometry( ( menuW - h - 5 ), y, h, h );
2299 KMdiIterator<KMdiChildView*>* it = createIterator();
2301 for ( it->first(); !it->isDone(); it->next() )
2303 if ( it->currentItem() == aWin )
2306 if ( !it->currentItem() )
2310 if ( it->currentItem() )
2312 activateView( it->currentItem() );
2323 KMdiIterator<KMdiChildView*>* it = createIterator();
2325 for ( it->first(); !it->isDone(); it->next() )
2327 if ( it->currentItem() == aWin )
2330 if ( !it->currentItem() )
2334 if ( it->currentItem() )
2336 activateView( it->currentItem() );
2348 KMdiIterator<KMdiChildView*>* it = createIterator();
2349 TQMap<TQDateTime, KMdiChildView*> m;
2350 for ( it->first(); !it->isDone(); it->next() )
2352 m.insert( it->currentItem() ->getTimeStamp(), it->currentItem() );
2355 if ( !activeWindow() )
2358 TQDateTime current = activeWindow() ->getTimeStamp();
2359 TQMap<TQDateTime, KMdiChildView*>::iterator pos( m.find( current ) );
2360 TQMap<TQDateTime, KMdiChildView*>::iterator newPos = pos;
2361 if ( pos != m.end() )
2365 if ( newPos != m.end() )
2373 activateView( pos.data() );
2381 KMdiIterator<KMdiChildView*>* it = createIterator();
2382 TQMap<TQDateTime, KMdiChildView*> m;
2383 for ( it->first(); !it->isDone(); it->next() )
2385 m.insert( it->currentItem() ->getTimeStamp(), it->currentItem() );
2388 if ( !activeWindow() )
2391 TQDateTime current = activeWindow() ->getTimeStamp();
2392 TQMap<TQDateTime, KMdiChildView*>::iterator pos( m.find( current ) );
2393 if ( pos != m.begin() )
2402 activateView( pos.data() );
2410 for (
int i = 0; pView && ( i < index ); i++ )
2412 pView = m_pDocumentViews->next();
2423 if ( enableMaxChildFrameMode )
2425 kdDebug(760) << k_funcinfo <<
"Turning on maximized child frame mode" << endl;
2426 m_bMaximizedChildFrmMode =
true;
2431 if ( !pCurrentChild || !m_pMainMenuBar )
2434 TQObject::connect( m_pUndock, TQ_SIGNAL( clicked() ), pCurrentChild, TQ_SLOT( undockPressed() ) );
2435 TQObject::connect( m_pMinimize, TQ_SIGNAL( clicked() ), pCurrentChild, TQ_SLOT( minimizePressed() ) );
2436 TQObject::connect( m_pRestore, TQ_SIGNAL( clicked() ), pCurrentChild, TQ_SLOT( maximizePressed() ) );
2437 m_pMinimize->show();
2441 if ( frameDecorOfAttachedViews() == KMdi::KDELaptopLook )
2443 m_pMainMenuBar->insertItem( TQPixmap( kde2laptop_closebutton_menu ), m_pMdi->topChild(), TQ_SLOT( closePressed() ), 0, -1, 0 );
2447 m_pMainMenuBar->insertItem( *pCurrentChild->
icon(), pCurrentChild->
systemMenu(), -1, 0 );
2450 TQObject::connect( m_pClose, TQ_SIGNAL( clicked() ), pCurrentChild, TQ_SLOT( closePressed() ) );
2454 kdDebug(760) << k_funcinfo <<
"no close button. things won't behave correctly" << endl;
2459 if ( !m_bMaximizedChildFrmMode )
2462 kdDebug(760) << k_funcinfo <<
"Turning off maximized child frame mode" << endl;
2463 m_bMaximizedChildFrmMode =
false;
2466 if ( pFrmChild && pFrmChild->m_pClient && pFrmChild->
state() == KMdiChildFrm::Maximized )
2468 pFrmChild->m_pClient->
restore();
2469 switchOffMaximizeModeForMenu( pFrmChild );
2478 if ( !m_pMainMenuBar )
2481 m_pMainMenuBar->removeItem( m_pMainMenuBar->idAt( 0 ) );
2485 Q_ASSERT( m_pClose );
2486 TQObject::disconnect( m_pUndock, TQ_SIGNAL( clicked() ), oldChild, TQ_SLOT( undockPressed() ) );
2487 TQObject::disconnect( m_pMinimize, TQ_SIGNAL( clicked() ), oldChild, TQ_SLOT( minimizePressed() ) );
2488 TQObject::disconnect( m_pRestore, TQ_SIGNAL( clicked() ), oldChild, TQ_SLOT( maximizePressed() ) );
2489 TQObject::disconnect( m_pClose, TQ_SIGNAL( clicked() ), oldChild, TQ_SLOT( closePressed() ) );
2492 m_pMinimize->hide();
2502 if ( !m_pMainMenuBar )
2507 if ( frameDecorOfAttachedViews() == KMdi::KDELaptopLook )
2508 m_pMainMenuBar->insertItem( TQPixmap( kde2laptop_closebutton_menu ), newChild, TQ_SLOT( closePressed() ), 0, -1, 0 );
2510 m_pMainMenuBar->insertItem( *newChild->
icon(), newChild->
systemMenu(), -1, 0 );
2515 m_pMainMenuBar->removeItem( m_pMainMenuBar->idAt( 1 ) );
2516 Q_ASSERT( m_pClose );
2517 TQObject::disconnect( m_pUndock, TQ_SIGNAL( clicked() ), oldChild, TQ_SLOT( undockPressed() ) );
2518 TQObject::disconnect( m_pMinimize, TQ_SIGNAL( clicked() ), oldChild, TQ_SLOT( minimizePressed() ) );
2519 TQObject::disconnect( m_pRestore, TQ_SIGNAL( clicked() ), oldChild, TQ_SLOT( maximizePressed() ) );
2520 TQObject::disconnect( m_pClose, TQ_SIGNAL( clicked() ), oldChild, TQ_SLOT( closePressed() ) );
2524 Q_ASSERT( m_pClose );
2525 TQObject::connect( m_pUndock, TQ_SIGNAL( clicked() ), newChild, TQ_SLOT( undockPressed() ) );
2526 TQObject::connect( m_pMinimize, TQ_SIGNAL( clicked() ), newChild, TQ_SLOT( minimizePressed() ) );
2527 TQObject::connect( m_pRestore, TQ_SIGNAL( clicked() ), newChild, TQ_SLOT( maximizePressed() ) );
2528 TQObject::connect( m_pClose, TQ_SIGNAL( clicked() ), newChild, TQ_SLOT( closePressed() ) );
2536 return m_pTaskBar->isSwitchedOn();
2545 m_pTaskBar->switchOn(
true );
2552 m_pTaskBar->switchOn(
false );
2558 bool tabPageMode =
false;
2559 if ( m_mdiMode == KMdi::TabPageMode )
2562 bool IDEAlMode =
false;
2563 if ( m_mdiMode == KMdi::IDEAlMode )
2566 bool noViewOpened =
false;
2567 if ( m_pDocumentViews->isEmpty() )
2568 noViewOpened =
true;
2571 if ( !m_bClearingOfWindowMenuBlocked )
2572 m_pWindowMenu->clear();
2574 d->closeWindowAction->plug(m_pWindowMenu);
2576 int closeAllId = m_pWindowMenu->insertItem( i18n(
"Close &All" ),
this, TQ_SLOT( closeAllViews() ) );
2579 d->closeWindowAction->setEnabled(
false);
2580 m_pWindowMenu->setItemEnabled( closeAllId,
false );
2583 if ( !tabPageMode && !IDEAlMode )
2585 int iconifyId = m_pWindowMenu->insertItem( i18n(
"&Minimize All" ),
this, TQ_SLOT( iconifyAllViews() ) );
2587 m_pWindowMenu->setItemEnabled( iconifyId,
false );
2590 m_pWindowMenu->insertSeparator();
2591 m_pWindowMenu->insertItem( i18n(
"&MDI Mode" ), m_pMdiModeMenu );
2592 m_pMdiModeMenu->clear();
2593 m_pMdiModeMenu->insertItem( i18n(
"&Toplevel Mode" ),
this, TQ_SLOT( switchToToplevelMode() ) );
2594 m_pMdiModeMenu->insertItem( i18n(
"C&hildframe Mode" ),
this, TQ_SLOT( switchToChildframeMode() ) );
2595 m_pMdiModeMenu->insertItem( i18n(
"Ta&b Page Mode" ),
this, TQ_SLOT( switchToTabPageMode() ) );
2596 m_pMdiModeMenu->insertItem( i18n(
"I&DEAl Mode" ),
this, TQ_SLOT( switchToIDEAlMode() ) );
2597 switch ( m_mdiMode )
2599 case KMdi::ToplevelMode:
2600 m_pMdiModeMenu->setItemChecked( m_pMdiModeMenu->idAt( 0 ),
true );
2602 case KMdi::ChildframeMode:
2603 m_pMdiModeMenu->setItemChecked( m_pMdiModeMenu->idAt( 1 ),
true );
2605 case KMdi::TabPageMode:
2606 m_pMdiModeMenu->setItemChecked( m_pMdiModeMenu->idAt( 2 ),
true );
2608 case KMdi::IDEAlMode:
2609 m_pMdiModeMenu->setItemChecked( m_pMdiModeMenu->idAt( 3 ),
true );
2615 m_pWindowMenu->insertSeparator();
2616 if ( !tabPageMode && !IDEAlMode )
2618 int placMenuId = m_pWindowMenu->insertItem( i18n(
"&Tile" ), m_pPlacingMenu );
2619 m_pPlacingMenu->clear();
2620 m_pPlacingMenu->insertItem( i18n(
"Ca&scade Windows" ), m_pMdi, TQ_SLOT( cascadeWindows() ) );
2621 m_pPlacingMenu->insertItem( i18n(
"Cascade &Maximized" ), m_pMdi, TQ_SLOT( cascadeMaximized() ) );
2622 m_pPlacingMenu->insertItem( i18n(
"Expand &Vertically" ), m_pMdi, TQ_SLOT( expandVertical() ) );
2623 m_pPlacingMenu->insertItem( i18n(
"Expand &Horizontally" ), m_pMdi, TQ_SLOT( expandHorizontal() ) );
2624 m_pPlacingMenu->insertItem( i18n(
"Tile &Non-Overlapped" ), m_pMdi, TQ_SLOT( tileAnodine() ) );
2625 m_pPlacingMenu->insertItem( i18n(
"Tile Overla&pped" ), m_pMdi, TQ_SLOT( tilePragma() ) );
2626 m_pPlacingMenu->insertItem( i18n(
"Tile V&ertically" ), m_pMdi, TQ_SLOT( tileVertically() ) );
2627 if ( m_mdiMode == KMdi::ToplevelMode )
2629 m_pWindowMenu->setItemEnabled( placMenuId,
false );
2631 m_pWindowMenu->insertSeparator();
2632 int dockUndockId = m_pWindowMenu->insertItem( i18n(
"&Dock/Undock" ), m_pDockMenu );
2633 m_pDockMenu->clear();
2634 m_pWindowMenu->insertSeparator();
2637 m_pWindowMenu->setItemEnabled( placMenuId,
false );
2638 m_pWindowMenu->setItemEnabled( dockUndockId,
false );
2641 int entryCount = m_pWindowMenu->count();
2646 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
2647 TQValueList<TQDateTime> timeStamps;
2648 for ( ; it.current(); ++it )
2650 pView = it.current();
2674 unsigned int windowItemCount = m_pWindowMenu->count() - entryCount;
2675 bool inserted =
false;
2677 TQValueList<TQDateTime>::iterator timeStampIterator = timeStamps.begin();
2678 for ( indx = 0; indx <= windowItemCount; indx++, ++timeStampIterator )
2680 bool putHere =
false;
2681 if ( ( *timeStampIterator ) < timeStamp )
2684 timeStamps.insert( timeStampIterator, timeStamp );
2688 m_pWindowMenu->insertItem( item, pView, TQ_SLOT( slot_clickedInWindowMenu() ), 0, -1, indx + entryCount );
2689 if ( pView == m_pCurrentWindow )
2691 m_pWindowMenu->setItemChecked( m_pWindowMenu->idAt( indx + entryCount ),
true );
2696 m_pDockMenu->insertItem( item, pView, TQ_SLOT( slot_clickedInDockMenu() ), 0, -1, indx );
2699 m_pDockMenu->setItemChecked( m_pDockMenu->idAt( indx ),
true );
2704 indx = windowItemCount + 1;
2709 m_pWindowMenu->insertItem( item, pView, TQ_SLOT( slot_clickedInWindowMenu() ), 0, -1, windowItemCount + entryCount );
2710 if ( pView == m_pCurrentWindow )
2712 m_pWindowMenu->setItemChecked( m_pWindowMenu->idAt( windowItemCount + entryCount ),
true );
2717 m_pDockMenu->insertItem( item, pView, TQ_SLOT( slot_clickedInDockMenu() ), 0, -1, windowItemCount );
2720 m_pDockMenu->setItemChecked( m_pDockMenu->idAt( windowItemCount ),
true );
2740 if ( m_mdiMode != KMdi::TabPageMode )
2745 if ( ( pView == pTopChild->m_pClient ) && pView->
isAttached() )
2751 activateView( pView );
2768 detachWindow( pView,
true );
2772 attachWindow( pView,
true );
2780 if ( !isFakingSDIApplication() )
2782 m_pWindowMenu->popup( p );
2791 for ( m_pDocumentViews->first(); ( pView = m_pDocumentViews->current() ) != 0L; m_pDocumentViews->next() )
2794 TQApplication::sendEvent( pView, &dragEndEvent );
2802 switch ( frameDecor )
2805 m_frameDecoration = KMdi::Win95Look;
2808 m_frameDecoration = KMdi::KDE1Look;
2811 m_frameDecoration = KMdi::KDELook;
2814 m_frameDecoration = KMdi::KDELaptopLook;
2817 tqDebug(
"unknown MDI decoration" );
2820 setMenuForSDIModeSysButtons( m_pMainMenuBar );
2821 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
2822 for ( ; it.current(); ++it )
2834 m_bSDIApplication =
true;
2836 m_pTaskBar->close();
2849 void KMdiMainFrm::setManagedDockPositionModeEnabled(
bool enabled )
2851 m_managedDockPositionMode = enabled;
2854 void KMdiMainFrm::setActiveToolDock( KMdiDockContainer* td )
2856 if ( td == d->activeDockPriority[ 0 ] )
2858 if ( d->activeDockPriority[ 0 ] == 0 )
2860 d->activeDockPriority[ 0 ] = td;
2866 for (
int dst = 3, src = 2;src >= 0;dst--, src-- )
2868 if ( d->activeDockPriority[ src ] == td )
2872 d->activeDockPriority[ dst ] = d->activeDockPriority[ src ];
2874 d->activeDockPriority[ 0 ] = td;
2877 void KMdiMainFrm::removeFromActiveDockList( KMdiDockContainer* td )
2879 for (
int i = 0;i < 4;i++ )
2881 if ( d->activeDockPriority[ i ] == td )
2884 d->activeDockPriority[ i ] = d->activeDockPriority[ i + 1 ];
2885 d->activeDockPriority[ 3 ] = 0;
2898 void KMdiMainFrm::prevToolViewInDock()
2900 KMdiDockContainer * td = d->activeDockPriority[ 0 ];
2906 void KMdiMainFrm::nextToolViewInDock()
2908 KMdiDockContainer * td = d->activeDockPriority[ 0 ];
2916 if ( m_documentTabWidget )
2917 return m_documentTabWidget->tabWidgetVisibility();
2919 return KMdi::NeverShowTabs;
2924 if ( m_documentTabWidget )
2925 m_documentTabWidget->setTabWidgetVisibility( visibility );
2930 return m_documentTabWidget;
2933 #include "tdemdimainfrm.moc"