41#include <tqclipboard.h>
42#include <tqobjectlist.h>
43#include <tqpopupmenu.h>
46#include <tdemenubar.h>
47#include <tdeapplication.h>
49#include <tqtabwidget.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"
112using namespace KParts;
114KMdi::FrameDecor KMdiMainFrm::m_frameDecoration = KMdi::KDELook;
116class 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;
138KMdiMainFrm::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() ) );
258void 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() ) );
294KMdiMainFrm::~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 )
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 ) ),
367 TQObject::connect( m_pMdi, TQ_SIGNAL( noMaximizedChildFrmLeft(
KMdiChildFrm* ) ),
380 m_pTaskBar =
new KMdiTaskBar(
this, TQMainWindow::DockBottom );
381 m_pTaskBar->installEventFilter(
this );
391void 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 )
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 );
448 if ( flags & KMdi::ToolWindow )
457 d->closeWindowAction->setEnabled(
true);
460 TQObject::connect( pWnd, TQ_SIGNAL( clickedInWindowMenu(
int ) ),
this, TQ_SLOT(
windowMenuItemActivated(
int ) ) );
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() );
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 ) )
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 ) )
529 if ( m_bMaximizedChildFrmMode && pWnd->
isAttached() )
532 pWnd->setGeometry( rectNormal );
539 if ( m_bMaximizedChildFrmMode && pWnd->
isAttached() )
549 return new KMdiToolViewAccessor(
this );
553void KMdiMainFrm::deleteToolWindow( TQWidget* pWnd )
555 if ( m_pToolViews->contains( pWnd ) )
556 deleteToolWindow( ( *m_pToolViews ) [ pWnd ] );
559void 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;
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() );
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() ) );
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() );
733 if ( !( m_pWinList->removeRef( pWnd ) ) )
735 if ( m_pWinList->count() == 0 )
736 m_pCurrentWindow = 0L;
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& ) ) );
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 )
804 m_pCurrentWindow = 0L;
811 else if ( m_pWinList->count() > 0 )
819 pWnd->m_bToolView =
false;
821 if ( !m_pCurrentWindow )
832 m_pDocumentViews->removeRef( pWnd );
833 if ( m_pDocumentViews->count() == 0 )
834 m_pCurrentWindow = 0L;
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();
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);
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;
1010void KMdiMainFrm::slotDocCurrentChanged( TQWidget* pWidget )
1013 pWnd->m_bMainframesActivateViewIsPending =
true;
1015 bool bActivateNecessary =
true;
1016 if ( m_pCurrentWindow != pWnd )
1017 m_pCurrentWindow = pWnd;
1022 if ( m_documentTabWidget && ( m_mdiMode == KMdi::TabPageMode || m_mdiMode == KMdi::IDEAlMode ) )
1024 m_documentTabWidget->showPage( pWnd );
1038 if ( bActivateNecessary )
1042 if ( !pWnd->isActiveWindow() )
1043 pWnd->setActiveWindow();
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;
1073 if ( m_documentTabWidget && m_mdiMode == KMdi::TabPageMode || m_mdiMode == KMdi::IDEAlMode )
1075 m_documentTabWidget->showPage( pWnd );
1089 if ( bActivateNecessary )
1093 if ( !pWnd->isActiveWindow() )
1094 pWnd->setActiveWindow();
1102 pWnd->m_bMainframesActivateViewIsPending =
false;
1115 TQApplication::postEvent(
this, ce );
1120 if ( e->type() == TQEvent::User )
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() &&
1185 static bool focusTCIsPending =
false;
1186 if ( !focusTCIsPending && m_mdiMode == KMdi::ChildframeMode )
1188 focusTCIsPending =
true;
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 ) )
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 )
1350 KMdi::MdiMode oldMdiMode = m_mdiMode;
1352 const int frameBorderWidth = 7;
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:
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;
1446void KMdiMainFrm::finishToplevelMode()
1448 m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockCorner );
1456 if ( m_mdiMode == 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;
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 );
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 )
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;
1570void 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() );
1602 if ( m_mdiMode == KMdi::TabPageMode )
1610 case KMdi::ChildframeMode:
1611 finishChildframeMode();
1613 case KMdi::ToplevelMode:
1614 finishToplevelMode();
1616 case KMdi::IDEAlMode:
1617 finishIDEAlMode(
false );
1619 m_mdiMode = KMdi::TabPageMode;
1626 setupTabbedDocumentViewSpace();
1627 m_mdiMode = KMdi::TabPageMode;
1628 if ( m_pCurrentWindow )
1629 m_pCurrentWindow->setFocus();
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;
1646void KMdiMainFrm::finishTabPageMode()
1649 if ( m_mdiMode == KMdi::TabPageMode )
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 );
1667 pView->reparent( 0, 0, p );
1669 pView->resize( sz );
1679 delete m_documentTabWidget;
1680 m_documentTabWidget = 0;
1687void 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;
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 )
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 )
1833 case KMdi::ChildframeMode:
1834 finishChildframeMode();
1836 case KMdi::ToplevelMode:
1837 finishToplevelMode();
1839 case KMdi::TabPageMode:
1840 m_mdiMode = KMdi::IDEAlMode;
1841 setupToolViewsForIDEALMode();
1849 setupTabbedDocumentViewSpace();
1850 m_mdiMode = KMdi::IDEAlMode;
1851 setupToolViewsForIDEALMode();
1853 if ( m_pCurrentWindow )
1854 m_pCurrentWindow->setFocus();
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;
1873void 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();
1883void 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;
1923void 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() ) );
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() ) );
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() ) );
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() ) );
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();
2019void KMdiMainFrm::finishIDEAlMode(
bool full )
2022 if ( m_mdiMode == KMdi::IDEAlMode )
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 );
2118TQStringList 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();
2132void 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 );
2211 delete m_pUndockButtonPixmap;
2212 delete m_pMinButtonPixmap;
2213 delete m_pRestoreButtonPixmap;
2214 delete m_pCloseButtonPixmap;
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 );
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 );
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();
2278 y = m_pMainMenuBar->height() / 2 - h / 2;
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 );
2301 for ( it->first(); !it->isDone(); it->next() )
2303 if ( it->currentItem() == aWin )
2306 if ( !it->currentItem() )
2310 if ( it->currentItem() )
2325 for ( it->first(); !it->isDone(); it->next() )
2327 if ( it->currentItem() == aWin )
2330 if ( !it->currentItem() )
2334 if ( it->currentItem() )
2349 TQMap<TQDateTime, KMdiChildView*> m;
2350 for ( it->first(); !it->isDone(); it->next() )
2352 m.insert( it->currentItem() ->getTimeStamp(), it->currentItem() );
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() )
2382 TQMap<TQDateTime, KMdiChildView*> m;
2383 for ( it->first(); !it->isDone(); it->next() )
2385 m.insert( it->currentItem() ->getTimeStamp(), it->currentItem() );
2392 TQMap<TQDateTime, KMdiChildView*>::iterator pos( m.find( current ) );
2393 if ( pos != m.begin() )
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();
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();
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 )
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() ) );
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() ) );
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() )
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" );
2821 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
2822 for ( ; it.current(); ++it )
2834 m_bSDIApplication =
true;
2836 m_pTaskBar->close();
2849void KMdiMainFrm::setManagedDockPositionModeEnabled(
bool enabled )
2851 m_managedDockPositionMode = enabled;
2854void 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;
2877void 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;
2898void KMdiMainFrm::prevToolViewInDock()
2900 KMdiDockContainer * td = d->activeDockPriority[ 0 ];
2906void KMdiMainFrm::nextToolViewInDock()
2908 KMdiDockContainer * td = d->activeDockPriority[ 0 ];
2916 if ( m_documentTabWidget )
2919 return KMdi::NeverShowTabs;
2924 if ( m_documentTabWidget )
2930 return m_documentTabWidget;
2933#include "tdemdimainfrm.moc"
A class derived from KXMLGUIClient that handles the various KMDI modes.
void destroyChild(KMdiChildFrm *child, bool focusTopChild=true)
Destroys a managed KMdiChildFrm Also deletes the client attached to this child.
KMdiChildFrm * topChild() const
Returns the topmost child (the active one) or 0 if there are no children.
void manageChild(KMdiChildFrm *lpC, bool bShow=true, bool bCascade=true)
Appends a new KMdiChildFrm to this manager.
void focusTopChild()
Gives focus to the topmost child if it doesn't get focus automatically or you want to wait to give it...
void destroyChildButNotItsView(KMdiChildFrm *lpC, bool bFocusTopChild=true)
Destroys a managed KMdiChildFrm Clients attached to the KMdiChildFrm are not deleted.
int getVisibleChildCount() const
Returns the number of visible children.
void setTopChild(KMdiChildFrm *child, bool setFocus=false)
Brings the child to the top of the stack The child is focused if setFocus is true.
TQPoint getCascadePoint(int indexOfWindow=-1)
Calculates the cascade point for the given index.
a TQCustomEvent for begin of dragging This special event will be useful, to inform view about child f...
a TQCustomEvent for end of dragging This special event will be useful, to inform view about child fra...
MdiWindowState state() const
Returns the current state of the window.
void setClient(KMdiChildView *w, bool bAutomaticResize=false)
Reparents the widget w to this KMdiChildFrm (if this is not already done) Installs an event filter to...
void raiseAndActivate()
Internally called from the signal focusInEventOccurs.
void setRestoreGeometry(const TQRect &newRestGeo)
Sets the geometry that will be restored by calling restore().
TQPixmap * icon() const
Returns the child frame icon.
TQPopupMenu * systemMenu() const
Returns the system menu.
const TQString & caption()
Gets the caption of this mdi child.
void unsetClient(TQPoint positionOffset=TQPoint(0, 0))
Reparents the client widget to 0 (desktop), moves with an offset from the original position Removes t...
void redecorateButtons()
sets new raise behavior and pixmaps of the buttons depending on the current decoration style
int captionHeight() const
Returns the caption bar height.
Base class for all your special view windows.
bool isMinimized() const
Tells if the window is minimized when attached to the Mdi manager, or if it is VISIBLE when 'floating...
virtual void youAreAttached(KMdiChildFrm *lpC)
Internally called, if KMdiMainFrm::attach is called.
virtual void youAreDetached()
Internally called, if KMdiMainFrm::detach is called.
KMdiChildFrm * mdiParent() const
Returns the KMdiChildFrm parent widget (or 0 if the window is not attached)
virtual void maximize(bool bAnimate)
Maximizes this window when it is attached to the Mdi manager.
bool isMaximized() const
Tells if the window is minimized when attached to the Mdi manager, otherwise returns false.
virtual void restore()
Restores this window to its normal size.
virtual void minimize(bool bAnimate)
Minimizes this window when it is attached to the Mdi manager.
void activate()
This method does the same as focusInEvent().
virtual void setCaption(const TQString &szCaption)
Sets the window caption string... Calls updateButton on the taskbar button if it has been set.
virtual void raise()
Calls TQWidget::raise() or it's parent widget raise() if attached.
const TQDateTime & getTimeStamp() const
Recall a previously remembered time, i.e.
void setRestoreGeometry(const TQRect &newRestGeo)
Sets the geometry that will be restored by calling restore().
bool isAttached() const
Returns true if the MDI view is a child window within the MDI mainframe widget or false if the MDI vi...
void setWindowMenuID(int id)
Internally used for setting an ID for the 'Window' menu entry.
const TQString & tabCaption() const
Returns the caption of the button on the taskbar.
virtual void show()
Calls TQWidget::show but also for it's parent widget if attached.
virtual void setTabCaption(const TQString &caption)
Sets the caption of the button referring to this window.
bool isToolView() const
Returns if this is added as MDI tool-view.
const TQString & caption() const
Returns the caption of the child window (different from the caption on the button in the taskbar)
TQRect restoreGeometry()
Returns the geometry that will be restored by calling restore().
virtual void setMinimumSize(int minw, int minh)
Sets the minimum size of the widget to w by h pixels.
void updateTimeStamp()
Remember the current time.
virtual void hide()
Calls TQWidget::hide() or it's parent widget hide() if attached.
virtual void setMaximumSize(int maxw, int maxh)
Sets the maximum size of the widget to w by h pixels.
void setStandardMDIMenuEnabled(bool showModeMenu=true)
Control whether or not the standard MDI menu is displayed when a context menu is displayed.
void fakeSDIApplication()
An SDI application user interface is faked:
virtual void tilePragma()
Tile Pragma.
void setTabWidgetVisibility(KMdi::TabWidgetVisibility)
Set tabwidget visibility.
virtual void hideViewTaskBar()
Hides the view taskbar.
void popupWindowMenu(TQPoint p)
Popups the "Window" menu.
void setToolviewStyle(int flags)
Sets the appearance of the toolview tabs.
bool isFakingSDIApplication() const
void windowMenuItemActivated(int id)
Usually called when the user clicks an MDI view item in the "Window" menu.
void lastChildFrmClosed()
Signals the last attached KMdiChildView has been closed.
virtual void showViewTaskBar()
Shows the view taskbar.
virtual void attachWindow(KMdiChildView *pWnd, bool bShow=true, bool bAutomaticResize=false)
Makes a main frame controlled undocked KMdiChildView docked.
bool windowExists(KMdiChildView *pWnd, ExistsAs as)
Returns whether this MDI child view is under MDI control (using addWindow() ) or not.
virtual void iconifyAllViews()
Iconfiy all views.
virtual void switchToIDEAlMode()
Docks all view windows.
void leftTopLevelMode()
Signals that the Toplevel mode has been left.
virtual TQPopupMenu * taskBarPopup(KMdiChildView *pWnd, bool bIncludeWindowPopup=false)
Returns a popup menu filled according to the MDI view state.
void mdiModeHasBeenChangedTo(KMdi::MdiMode)
Signals the MDI mode has been changed.
virtual void setEnableMaximizedChildFrmMode(bool bEnable)
If in Childframe mode, we can switch between maximized or restored shown MDI views.
void childViewIsDetachedNow(TQWidget *)
Signals that a child view has been detached (undocked to desktop)
bool isViewTaskBarOn()
Shows the view taskbar.
KMdiChildView * activeWindow()
Returns the focused attached MDI view.
virtual void taskbarButtonRightClicked(KMdiChildView *pWnd)
Activates the MDI view (see activateView() ) and popups the taskBar popup menu (see taskBarPopup() ).
virtual void expandVertical()
Maximizes only in vertical direction.
virtual void closeWindow(KMdiChildView *pWnd, bool layoutTaskBar=true)
Removes a KMdiChildView from the MDI system and from the main frame`s control.
KMdiChildView * createWrapper(TQWidget *view, const TQString &name, const TQString &shortName)
addWindow demands a KMdiChildView.
virtual void activateLastWin()
Activates the view last viewed concerning to the access time.
virtual void activatePrevWin()
Activates the previous open view.
virtual void activateFirstWin()
Activates the view first viewed concerning to the access time.
KMdiChildView * findWindow(const TQString &caption)
Returns the KMdiChildView belonging to the given caption string.
virtual void closeActiveView()
Closes the view of the active (topchild) window.
virtual void childWindowCloseRequest(KMdiChildView *pWnd)
Someone wants that the MDI view to be closed.
virtual void activateView(int index)
Activates the view with the tab page index (TabPage mode only)
KMdiToolViewAccessor * createToolWindow()
Using this method you have to use the setWidget method of the access object, and it is very recommend...
virtual void setUndockPositioningOffset(TQPoint offset)
Sets an offset value that is used on detachWindow() .
virtual void expandHorizontal()
Maximizes only in horizontal direction.
KMdi::MdiMode mdiMode()
Returns the MDI mode.
virtual void cascadeMaximized()
Cascades the windows resizing them to the maximum available size.
void collapseOverlapContainers()
Signals we need to collapse the overlapped containers.
virtual void switchToToplevelMode()
Undocks all view windows (unix-like)
virtual void tileVertically()
Tile Vertically.
virtual void removeWindowFromMdi(KMdiChildView *pWnd)
Removes a KMdiChildView from the MDI system and from the main frame`s control.
KMdiIterator< KMdiChildView * > * createIterator()
If you don't want to know about the inner structure of the KMdi system, you can use this iterator to ...
virtual void applyOptions()
Called in the constructor (forces a resize of all MDI views)
virtual void setMenuForSDIModeSysButtons(KMenuBar *menuBar=0)
Tells the MDI system a QMenu where it can insert buttons for the system menu, undock,...
virtual TQPopupMenu * windowPopup(KMdiChildView *pWnd, bool bIncludeTaskbarPopup=true)
Returns a popup menu with only a title "Window".
virtual void slot_toggleTaskBar()
Switches the KMdiTaskBar on and off.
virtual void tileAnodine()
Tile Anodine.
void dragEndTimeOut()
The timer for main widget moving has elapsed -> send drag end to all concerned views.
virtual void cascadeWindows()
Cascades the windows without resizing them.
virtual KMdiToolViewAccessor * addToolWindow(TQWidget *pWnd, KDockWidget::DockPosition pos=KDockWidget::DockNone, TQWidget *pTargetWnd=0L, int percent=50, const TQString &tabToolTip=0, const TQString &tabCaption=0)
Usually called from addWindow() when adding a tool view window.
static int frameDecorOfAttachedViews()
virtual void addWindow(KMdiChildView *pWnd, int flags=KMdi::StandardAdd)
Adds a KMdiChildView to the MDI system.
virtual bool event(TQEvent *e)
Catches certain Qt events and processes it here.
void dockMenuItemActivated(int id)
Usually called when the user clicks an MDI view item in the sub-popup menu "Docking" of the "Window" ...
void updateSysButtonConnections(KMdiChildFrm *oldChild, KMdiChildFrm *newChild)
Reconnects the system buttons form maximize mode (SDI mode) with the new child frame.
virtual void switchToChildframeMode()
Docks all view windows (Windows-like)
virtual void detachWindow(KMdiChildView *pWnd, bool bShow=true)
Makes a docked KMdiChildView undocked.
virtual void closeAllViews()
Close all views.
TQSize defaultChildFrmSize()
Returns the default size for a newly added KMdiChildView.
virtual void switchToTabPageMode()
Docks all view windows (Windows-like)
void setSwitching(const bool switching)
We're switching something.
virtual void createTaskBar()
Creates a new MDI taskbar (showing the MDI views as taskbar entries) and shows it.
virtual void createMdiManager()
Creates the MDI view area and connects some signals and slots with the KMdiMainFrm widget.
virtual bool eventFilter(TQObject *obj, TQEvent *e)
void switchOffMaximizeModeForMenu(KMdiChildFrm *oldChild)
Turns the system buttons for maximize mode (SDI mode) off, and disconnects them.
KMdi::TabWidgetVisibility tabWidgetVisibility()
Get tabwidget visibility.
virtual void setFrameDecorOfAttachedViews(int frameDecor)
Sets the decoration of the window frame of docked (attached) MDI views.
void lastChildViewClosed()
Signals the last KMdiChildView (that is under MDI control) has been closed.
void findRootDockWidgets(TQPtrList< KDockWidget > *pRootDockWidgetList, TQValueList< TQRect > *pPositionList)
find the root dockwidgets and store their geometry
void setIDEAlModeStyle(int flags) TDE_DEPRECATED
Sets the appearance of the IDEAl mode.
virtual void activateNextWin()
Activates the next open view.
virtual void fillWindowMenu()
Update of the window menu contents.
virtual void setSysButtonsAtMenuPosition()
If there's a main menubar given, it will create the 4 maximize mode buttons there (undock,...
virtual void setMinimumSize(int minw, int minh)
Do nothing when in Toplevel mode.
class KTabWidget * tabWidget() const
Returns the tabwidget used in IDEAl and Tabbed modes.
void closeViewButtonPressed()
internally used to handle click on view close button (TabPage mode, only)
KMdiTaskBarButton * getButton(KMdiChildView *win_ptr)
Get the button belonging to the MDI view given as parameter.
KMdiTaskBarButton * addWinButton(KMdiChildView *win_ptr)
Add a new KMdiTaskBarButton .
void setActiveButton(KMdiChildView *win_ptr)
Pushes the desired taskbar button down (switch on), the old one is released (switched off).
bool isSwitchedOn() const
void switchOn(bool bOn)
Switch it on or off.
void removeWinButton(KMdiChildView *win_ptr, bool haveToLayoutTaskBar=true)
Removes a KMdiTaskBarButton and deletes it.
A namespace for the KMDI library.
@ TextAndIcon
Show both the icon and description on the toolview tabs.
@ IconOnly
Show only icons on the toolview tabs.
@ TextOnly
Show only the text description on the toolview tabs.