• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdemdi
 

tdemdi

  • tdemdi
tdemdimainfrm.cpp
1//----------------------------------------------------------------------------
2// filename : tdemdimainfrm.cpp
3//----------------------------------------------------------------------------
4// Project : KDE MDI extension
5//
6// begin : 07/1999 by Szymon Stefanek as part of kvirc
7// (an IRC application)
8// changes : 09/1999 by Falk Brettschneider to create an
9// - 06/2000 stand-alone Qt extension set of
10// classes and a Qt-based library
11// 2000-2003 maintained by the KDevelop project
12// patches : 02/2000 by Massimo Morin (mmorin@schedsys.com)
13// */2000 by Lars Beikirch (Lars.Beikirch@gmx.net)
14// 01/2003 by Jens Zurheide (jens.zurheide@gmx.de)
15//
16// copyright : (C) 1999-2003 by Szymon Stefanek (stefanek@tin.it)
17// and
18// Falk Brettschneider
19// email : falkbr@kdevelop.org (Falk Brettschneider)
20//----------------------------------------------------------------------------
21//
22//----------------------------------------------------------------------------
23//
24// This program is free software; you can redistribute it and/or modify
25// it under the terms of the GNU Library General Public License as
26// published by the Free Software Foundation; either version 2 of the
27// License, or (at your option) any later version.
28//
29//----------------------------------------------------------------------------
30
31
32/*
33 * ATTENTION: please do you part to try to make this file legible. It's
34 * extremely hard to read already. Especially follow the indenting rules.
35 */
36#include "config.h"
37
38#include <assert.h>
39
40#include <tqcursor.h>
41#include <tqclipboard.h>
42#include <tqobjectlist.h>
43#include <tqpopupmenu.h>
44#include <tqmenubar.h>
45
46#include <tdemenubar.h>
47#include <tdeapplication.h>
48#include <kdebug.h>
49#include <tqtabwidget.h>
50#include <tdelocale.h>
51#include <tdestdaccel.h>
52
53#include <kiconloader.h>
54#include <tdemdidockcontainer.h>
55
56
57#include <tqtoolbutton.h>
58#include <tqdockarea.h>
59#include <tqlayout.h>
60#include <tqtimer.h>
61#include <tqtextstream.h>
62#include <tqstring.h>
63#include <tqmap.h>
64#include <tqvaluelist.h>
65
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"
76
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"
94
95#ifdef TQ_WS_X11
96#ifndef NO_KDE
97#include <X11/X.h> // schroder
98#include <X11/Xlib.h> // schroder
99#endif
100
101#ifdef KeyRelease
102/* I hate the defines in the X11 header files. Get rid of one of them */
103#undef KeyRelease
104#endif
105
106#ifdef KeyPress
107/* I hate the defines in the X11 header files. Get rid of one of them */
108#undef KeyPress
109#endif
110#endif // TQ_WS_X11 && ! K_WS_QTONLY
111
112using namespace KParts;
113
114KMdi::FrameDecor KMdiMainFrm::m_frameDecoration = KMdi::KDELook;
115
116class KMdiMainFrmPrivate
117{
118public:
119 KMdiMainFrmPrivate() : focusList( 0 )
120 {
121 for ( int i = 0;i < 4;i++ )
122 {
123 activeDockPriority[ i ] = 0;
124 m_styleIDEAlMode = 0;
125 m_toolviewStyle = 0;
126 }
127 }
128 ~KMdiMainFrmPrivate()
129 {}
130 KMdiDockContainer* activeDockPriority[ 4 ];
131 KMdiFocusList *focusList;
132 int m_styleIDEAlMode;
133 int m_toolviewStyle;
134 TDEAction *closeWindowAction;
135};
136
137//============ constructor ============//
138KMdiMainFrm::KMdiMainFrm( TQWidget* parentWidget, const char* name, KMdi::MdiMode mdiMode, WFlags flags )
139 : KParts::DockMainWindow( parentWidget, name, flags )
140 , m_mdiMode( KMdi::UndefinedMode )
141 , m_pMdi( 0L )
142 , m_pTaskBar( 0L )
143 , m_pDocumentViews( 0L )
144 , m_pCurrentWindow( 0L )
145 , m_pWindowPopup( 0L )
146 , m_pTaskBarPopup( 0L )
147 , m_pWindowMenu( 0L )
148 , m_pDockMenu( 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 )
156 , m_pUndock( 0L )
157 , m_pMinimize( 0L )
158 , m_pRestore( 0L )
159 , m_pClose( 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 )
178{
179 kdDebug(760) << k_funcinfo << endl;
180 // Create the local lists of windows
181 m_pDocumentViews = new TQPtrList<KMdiChildView>;
182 m_pDocumentViews->setAutoDelete( false );
183 m_pToolViews = new TQMap<TQWidget*, KMdiToolViewAccessor*>;
184
185 // This seems to be needed (re-check it after Qt2.0 comed out)
186 setFocusPolicy( TQWidget::ClickFocus );
187
188 // create the central widget
189 createMdiManager();
190
191 // cover KMdi's childarea by a dockwidget
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 );
197 // set this dock to main view
198 setView( m_pDockbaseAreaOfDocumentViews );
199 setMainDockWidget( m_pDockbaseAreaOfDocumentViews );
200
201 // Apply options for the MDI manager
202 applyOptions();
203
204 m_pTaskBarPopup = new TQPopupMenu( this, "taskbar_popup_menu" );
205 m_pWindowPopup = new TQPopupMenu( this, "window_popup_menu" );
206
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() ) );
210
211 m_pDockMenu = new TQPopupMenu( this, "dock_menu" );
212 m_pDockMenu->setCheckable( true );
213
214 m_pMdiModeMenu = new TQPopupMenu( this, "mdimode_menu" );
215 m_pMdiModeMenu->setCheckable( true );
216
217 m_pPlacingMenu = new TQPopupMenu( this, "placing_menu" );
218
219 d->closeWindowAction = new TDEAction(i18n("&Close"), TDEStdAccel::close(),
220 this, TQ_SLOT(closeActiveView()), actionCollection(), "window_close");
221
222 // the MDI view taskbar
223 createTaskBar();
224
225 // this is only a hack, but prevents us from crash because the buttons are otherwise
226 // not created before we switch the modes where we need them !!!
227 setMenuForSDIModeSysButtons( menuBar() );
228
229 switch ( mdiMode )
230 {
231 case KMdi::IDEAlMode:
232 kdDebug(760) << k_funcinfo << "Switching to IDEAl mode" << endl;
233 switchToIDEAlMode();
234 break;
235 case KMdi::TabPageMode:
236 kdDebug(760) << k_funcinfo << "Switching to tab page mode" << endl;
237 switchToTabPageMode();
238 break;
239 case KMdi::ToplevelMode:
240 kdDebug(760) << k_funcinfo << "Switching to top level mode" << endl;
241 switchToToplevelMode();
242 break;
243 default:
244 m_mdiMode = KMdi::ChildframeMode;
245 kdDebug(760) << k_funcinfo << "Switching to child frame mode" << endl;
246 break;
247 }
248
249 // drag end timer
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() ) );
256}
257
258void KMdiMainFrm::verifyToplevelHeight()
259{
260 if ( m_mdiMode != KMdi::ToplevelMode )
261 return;
262
263 //kdDebug(760) << k_funcinfo << endl;
264 int topDockHeight = topDock() ? topDock()->height() : 0;
265 int menuBarHeight = hasMenuBar() ? menuBar()->height() : 0;
266 setFixedHeight( topDockHeight + menuBarHeight );
267 resize( width(), height() );
268}
269
270void KMdiMainFrm::setStandardMDIMenuEnabled( bool showModeMenu )
271{
272 m_mdiGUIClient = new KMDIPrivate::KMDIGUIClient( this, showModeMenu );
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() ) );
277
278 if ( m_mdiMode == KMdi::IDEAlMode )
279 {
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() ) );
288 }
289
290 emit mdiModeHasBeenChangedTo( m_mdiMode );
291}
292
293//============ ~KMdiMainFrm ============//
294KMdiMainFrm::~KMdiMainFrm()
295{
296 //save the children first to a list, as removing invalidates our iterator
297 TQValueList<KMdiChildView*> children;
298 for ( KMdiChildView * w = m_pDocumentViews->first();w;w = m_pDocumentViews->next() )
299 children.append( w );
300
301 // safely close the windows so properties are saved...
302 TQValueListIterator<KMdiChildView*> childIt;
303 for ( childIt = children.begin(); childIt != children.end(); ++childIt )
304 {
305 closeWindow( *childIt, false ); // without re-layout taskbar!
306 }
307
308 emit lastChildViewClosed();
309 delete m_pDocumentViews;
310 delete m_pToolViews;
311 m_pToolViews = 0;
312 delete m_pDragEndTimer;
313
314 delete m_pUndockButtonPixmap;
315 delete m_pMinButtonPixmap;
316 delete m_pRestoreButtonPixmap;
317 delete m_pCloseButtonPixmap;
318
319 //deletes added for Release-Version-Pop-Up-WinMenu-And-Go-Out-Problem
320 delete m_pDockMenu;
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;
328 m_mdiGUIClient = 0;
329 delete d;
330 d = 0;
331}
332
333//============ applyOptions ============//
334//FIXME something wrong with this function. dunno what though
335void KMdiMainFrm::applyOptions()
336{
337 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
338 for ( ; ( *it ); ++it )
339 {
340 TQWidget* childFrame = 0L;
341 if ( ( *it )->mdiParent() )
342 {
343 kdDebug(760) << k_funcinfo << "using child view's mdi parent for resize hack" << endl;
344 childFrame = ( *it )->mdiParent();
345 }
346 else
347 {
348 kdDebug(760) << k_funcinfo << "using child view for resize hack" << endl;
349 childFrame = ( *it );
350 }
351
352 int w = childFrame->width();
353 int h = childFrame->height();
354 childFrame->resize( w + 1, h + 1 );
355 childFrame->resize( w - 1, h - 1 );
356 }
357}
358
359//============ createMdiManager ============//
360void KMdiMainFrm::createMdiManager()
361{
362 kdDebug(760) << k_funcinfo << "creating MDI manager" << endl;
363 m_pMdi = new KMdiChildArea( this );
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* ) ) );
369 TQObject::connect( m_pMdi, TQ_SIGNAL( sysButtonConnectionsMustChange( KMdiChildFrm*, KMdiChildFrm* ) ),
370 this, TQ_SLOT( updateSysButtonConnections( KMdiChildFrm*, 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() ) );
375}
376
377//============ createTaskBar ==============//
378void KMdiMainFrm::createTaskBar()
379{
380 m_pTaskBar = new KMdiTaskBar( this, TQMainWindow::DockBottom );
381 m_pTaskBar->installEventFilter( this );
382}
383
384void KMdiMainFrm::slot_toggleTaskBar()
385{
386 if ( !m_pTaskBar )
387 return;
388 m_pTaskBar->switchOn( !m_pTaskBar->isSwitchedOn() );
389}
390
391void KMdiMainFrm::resizeEvent( TQResizeEvent *e )
392{
393 if ( ( m_mdiMode == KMdi::ToplevelMode ) && !parentWidget() )
394 {
395 if ( e->oldSize().height() != e->size().height() )
396 return ;
397 }
398 KParts::DockMainWindow::resizeEvent( e );
399 if ( !m_mdiGUIClient )
400 return ;
401 setSysButtonsAtMenuPosition();
402}
403
404//================ setMinimumSize ===============//
405
406void KMdiMainFrm::setMinimumSize( int minw, int minh )
407{
408 if ( ( m_mdiMode == KMdi::ToplevelMode ) && !parentWidget() )
409 return ;
410 DockMainWindow::setMinimumSize( minw, minh );
411}
412
413//================ wrapper ===============//
414
415KMdiChildView* KMdiMainFrm::createWrapper( TQWidget *view, const TQString& name, const TQString& shortName )
416{
417 Q_ASSERT( view ); // if this assert fails, then some part didn't return a widget. Fix the part ;)
418
419 KMdiChildView* pMDICover = new KMdiChildView( name /*caption*/, 0L /*parent*/,
420 name.latin1() );
421 TQBoxLayout* pLayout = new TQHBoxLayout( pMDICover, 0, -1, "layout" );
422 view->reparent( pMDICover, TQPoint( 0, 0 ) );
423 pLayout->addWidget( view );
424 // pMDICover->setName(name);
425 pMDICover->setTabCaption( shortName );
426 pMDICover->setCaption( name );
427
428 const TQPixmap* wndIcon = view->icon();
429 if ( wndIcon )
430 pMDICover->setIcon( *wndIcon );
431
432 pMDICover->trackIconAndCaptionChanges( view );
433 return pMDICover;
434}
435
436//================ addWindow ===============//
437
438void KMdiMainFrm::addWindow( KMdiChildView* pWnd, int flags )
439{
440 addWindow( pWnd, flags, -1 );
441}
442
443void KMdiMainFrm::addWindow( KMdiChildView* pWnd, int flags, int index )
444{
445 if ( windowExists( pWnd, AnyView ) ) //already added
446 return;
447
448 if ( flags & KMdi::ToolWindow )
449 {
450 addToolWindow( pWnd );
451 // some kind of cascading
452 pWnd->move( m_pMdi->mapToGlobal( m_pMdi->getCascadePoint() ) );
453
454 return ;
455 }
456
457 d->closeWindowAction->setEnabled(true);
458
459 // common connections used when under MDI control
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 ) ) );
466 TQObject::connect( pWnd, TQ_SIGNAL( activated( KMdiChildView* ) ), this, TQ_SIGNAL( viewActivated( KMdiChildView* ) ) );
467 TQObject::connect( pWnd, TQ_SIGNAL( deactivated( KMdiChildView* ) ), this, TQ_SIGNAL( viewDeactivated( KMdiChildView* ) ) );
468
469 if ( index == -1 )
470 m_pDocumentViews->append( pWnd );
471 else
472 m_pDocumentViews->insert( index, pWnd );
473
474 if ( m_pTaskBar )
475 {
476 KMdiTaskBarButton* but = m_pTaskBar->addWinButton( pWnd );
477 TQObject::connect( pWnd, TQ_SIGNAL( tabCaptionChanged( const TQString& ) ), but, TQ_SLOT( setNewText( const TQString& ) ) );
478 }
479
480 // embed the view depending on the current MDI mode
481 if ( m_mdiMode == KMdi::TabPageMode || m_mdiMode == KMdi::IDEAlMode )
482 {
483 TQPixmap pixmap;
484 if ( pWnd->icon() )
485 pixmap = *( pWnd->icon() );
486
487 m_documentTabWidget->insertTab( pWnd, pixmap, pWnd->tabCaption(), index );
488
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& ) ) );
491 }
492 else
493 {
494 if ( ( flags & KMdi::Detach ) || ( m_mdiMode == KMdi::ToplevelMode ) )
495 {
496 detachWindow( pWnd, !( flags & KMdi::Hide ) );
497 emit childViewIsDetachedNow( pWnd ); // fake it because detach won't call it in this case of addWindow-to-MDI
498 }
499 else
500 attachWindow( pWnd, !( flags & KMdi::Hide ), flags & KMdi::UseKMdiSizeHint );
501
502 if ( ( m_bMaximizedChildFrmMode && ( !m_bSDIApplication && ( flags & KMdi::Detach ) )
503 && m_mdiMode != KMdi::ToplevelMode ) || ( flags & KMdi::Maximize ) )
504 {
505 if ( !pWnd->isMaximized() )
506 pWnd->maximize();
507 }
508
509 if ( !m_bSDIApplication || ( flags & KMdi::Detach ) )
510 {
511 if ( flags & KMdi::Minimize )
512 pWnd->minimize();
513
514 if ( !( flags & KMdi::Hide ) )
515 {
516 if ( pWnd->isAttached() )
517 pWnd->mdiParent()->show();
518 else
519 pWnd->show();
520 }
521 }
522 }
523}
524
525//============ addWindow ============//
526void KMdiMainFrm::addWindow( KMdiChildView* pWnd, TQRect rectNormal, int flags )
527{
528 addWindow( pWnd, flags );
529 if ( m_bMaximizedChildFrmMode && pWnd->isAttached() )
530 pWnd->setRestoreGeometry( rectNormal );
531 else
532 pWnd->setGeometry( rectNormal );
533}
534
535//============ addWindow ============//
536void KMdiMainFrm::addWindow( KMdiChildView* pWnd, TQPoint pos, int flags )
537{
538 addWindow( pWnd, flags );
539 if ( m_bMaximizedChildFrmMode && pWnd->isAttached() )
540 pWnd->setRestoreGeometry( TQRect( pos, pWnd->restoreGeometry().size() ) );
541 else
542 pWnd->move( pos );
543}
544
545
546
547KMdiToolViewAccessor *KMdiMainFrm::createToolWindow()
548{
549 return new KMdiToolViewAccessor( this );
550}
551
552
553void KMdiMainFrm::deleteToolWindow( TQWidget* pWnd )
554{
555 if ( m_pToolViews->contains( pWnd ) )
556 deleteToolWindow( ( *m_pToolViews ) [ pWnd ] );
557}
558
559void KMdiMainFrm::deleteToolWindow( KMdiToolViewAccessor *accessor )
560{
561 delete accessor;
562}
563
564//============ addWindow ============//
565KMdiToolViewAccessor *KMdiMainFrm::addToolWindow( TQWidget* pWnd, KDockWidget::DockPosition pos, TQWidget* pTargetWnd,
566 int percent, const TQString& tabToolTip, const TQString& tabCaption )
567{
568 TQWidget* tvta = pWnd;
569 KDockWidget* pDW = dockManager->getDockWidgetFromName( pWnd->name() );
570 if ( pDW )
571 {
572 // probably readDockConfig already created the widgetContainer, use that
573 pDW->setWidget( pWnd );
574
575 if ( pWnd->icon() )
576 pDW->setPixmap( *pWnd->icon() );
577
578 pDW->setTabPageLabel( ( tabCaption == 0 ) ? pWnd->caption() : tabCaption );
579 pDW->setToolTipString( tabToolTip );
580 dockManager->removeFromAutoCreateList( pDW );
581 pWnd = pDW;
582 }
583
584 TQRect r = pWnd->geometry();
585
586 KMdiToolViewAccessor *mtva = new KMdiToolViewAccessor( this, pWnd, tabToolTip, ( tabCaption == 0 ) ? pWnd->caption() : tabCaption );
587 m_pToolViews->insert( tvta, mtva );
588
589 if ( pos == KDockWidget::DockNone )
590 {
591 mtva->d->widgetContainer->setEnableDocking( KDockWidget::DockNone );
592 mtva->d->widgetContainer->reparent( this, (WFlags)(WType_TopLevel | WType_Dialog), r.topLeft(), true ); //pToolView->isVisible());
593 }
594 else //add and dock the toolview as a dockwidget view
595 mtva->place( pos, pTargetWnd, percent );
596
597
598 return mtva;
599}
600
601//============ attachWindow ============//
602void KMdiMainFrm::attachWindow( KMdiChildView *pWnd, bool bShow, bool bAutomaticResize )
603{
604 pWnd->installEventFilter( this );
605
606 // decide whether window shall be cascaded
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() ) )
616 {
617 bCascade = true;
618 }
619
620 // create frame and insert child view
621 KMdiChildFrm *lpC = new KMdiChildFrm( m_pMdi );
622 pWnd->hide();
623 if ( !bCascade )
624 lpC->move( topLeftMdiChildArea );
625
626 lpC->setClient( pWnd, bAutomaticResize );
627 lpC->setFocus();
628 pWnd->youAreAttached( lpC );
629 if ( ( m_mdiMode == KMdi::ToplevelMode ) && !parentWidget() )
630 {
631 setMinimumHeight( m_oldMainFrmMinHeight );
632 setMaximumHeight( m_oldMainFrmMaxHeight );
633 resize( width(), m_oldMainFrmHeight );
634 m_oldMainFrmHeight = 0;
635 switchToChildframeMode();
636 }
637
638 m_pMdi->manageChild( lpC, false, bCascade );
639 if ( m_pMdi->topChild() && m_pMdi->topChild() ->isMaximized() )
640 {
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 );
645 lpC->setRestoreGeometry( r );
646 }
647
648 if ( bShow )
649 {
650 lpC->show();
651 }
652
653#undef FocusIn
654 TQFocusEvent fe( TQEvent::FocusIn );
655 TQApplication::sendEvent( pWnd, &fe );
656
657 m_pCurrentWindow = pWnd; // required for checking the active item
658}
659
660//============= detachWindow ==============//
661void KMdiMainFrm::detachWindow( KMdiChildView *pWnd, bool bShow )
662{
663 if ( pWnd->isAttached() )
664 {
665 pWnd->removeEventFilter( this );
666 pWnd->youAreDetached();
667 // this is only if it was attached and you want to detach it
668 if ( pWnd->parent() )
669 {
670 KMdiChildFrm * lpC = pWnd->mdiParent();
671 if ( lpC )
672 {
673 if ( lpC->icon() )
674 {
675 TQPixmap pixm( *( lpC->icon() ) );
676 pWnd->setIcon( pixm );
677 }
678 TQString capt( lpC->caption() );
679 if ( !bShow )
680 lpC->hide();
681 lpC->unsetClient( m_undockPositioningOffset );
682 m_pMdi->destroyChildButNotItsView( lpC, false ); //Do not focus the new top child , we loose focus...
683 pWnd->setCaption( capt );
684 }
685 }
686 }
687 else
688 {
689 if ( pWnd->size().isEmpty() || ( pWnd->size() == TQSize( 1, 1 ) ) )
690 {
691 if ( m_pCurrentWindow )
692 {
693 pWnd->setGeometry( TQRect( m_pMdi->getCascadePoint( m_pDocumentViews->count() - 1 ), m_pCurrentWindow->size() ) );
694 }
695 else
696 {
697 pWnd->setGeometry( TQRect( m_pMdi->getCascadePoint( m_pDocumentViews->count() - 1 ), defaultChildFrmSize() ) );
698 }
699 }
700#ifdef TQ_WS_X11
701 if ( mdiMode() == KMdi::ToplevelMode )
702 {
703 XSetTransientForHint( tqt_xdisplay(), pWnd->winId(), topLevelWidget() ->winId() );
704 }
705#endif
706
707 return ;
708 }
709
710#ifdef TQ_WS_X11
711 if ( mdiMode() == KMdi::ToplevelMode )
712 {
713 XSetTransientForHint( tqt_xdisplay(), pWnd->winId(), topLevelWidget() ->winId() );
714 }
715#endif
716
717 // this will show it...
718 if ( bShow )
719 {
720 activateView( pWnd );
721 }
722
723 emit childViewIsDetachedNow( pWnd );
724}
725
726//============== removeWindowFromMdi ==============//
727void KMdiMainFrm::removeWindowFromMdi( KMdiChildView *pWnd )
728{
729 Q_UNUSED( pWnd );
730 //Closes a child window. sends no close event : simply deletes it
731 //FIXME something wrong with this, but nobody knows whatcart
732#if 0
733 if ( !( m_pWinList->removeRef( pWnd ) ) )
734 return ;
735 if ( m_pWinList->count() == 0 )
736 m_pCurrentWindow = 0L;
737
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 ) ) );
744
745 if ( m_pTaskBar )
746 {
747 KMdiTaskBarButton * but = m_pTaskBar->getButton( pWnd );
748 if ( but != 0L )
749 {
750 TQObject::disconnect( pWnd, TQ_SIGNAL( tabCaptionChanged( const TQString& ) ), but, TQ_SLOT( setNewText( const TQString& ) ) );
751 }
752 m_pTaskBar->removeWinButton( pWnd );
753 }
754
755 if ( m_mdiMode == KMdi::TabPageMode )
756 {
757 if ( m_pWinList->count() == 0 )
758 {
759 if ( !m_pDockbaseAreaOfDocumentViews )
760 {
761 m_pDockbaseAreaOfDocumentViews = createDockWidget( "mdiAreaCover", TQPixmap(), 0L, "mdi_area_cover" );
762 m_pDockbaseAreaOfDocumentViews->setDockWindowTransient( this, true );
763
764 m_pDockbaseAreaOfDocumentViews->setWidget( m_pMdi );
765 setMainDockWidget( m_pDockbaseAreaOfDocumentViews );
766 }
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;
772 m_pClose->hide();
773 }
774 KDockWidget* pDockW = ( KDockWidget* ) pWnd->parentWidget();
775 pWnd->reparent( 0L, TQPoint( 0, 0 ) );
776 pDockW->setWidget( 0L );
777 if ( pDockW == m_pDockbaseOfTabPage )
778 {
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 )
783 {
784 m_pDockbaseOfTabPage = ( KDockWidget* ) pTab->page( cnt - 1 ); // different to the one deleted next
785 }
786 }
787 delete pDockW;
788 if ( m_pWinList->count() == 1 )
789 {
790 m_pWinList->last() ->activate(); // all other views are activated by tab switch
791 }
792 }
793 else if ( pWnd->isAttached() )
794 {
795 pWnd->mdiParent() ->hide();
796 m_pMdi->destroyChildButNotItsView( pWnd->mdiParent() );
797 }
798 else
799 {
800 // is not attached
801 if ( m_pMdi->getVisibleChildCount() > 0 )
802 {
803 setActiveWindow();
804 m_pCurrentWindow = 0L;
805 KMdiChildView* pView = m_pMdi->topChild() ->m_pClient;
806 if ( pView )
807 {
808 pView->activate();
809 }
810 }
811 else if ( m_pWinList->count() > 0 )
812 {
813 //crash? m_pWinList->last()->activate();
814 //crash? m_pWinList->last()->setFocus();
815 }
816 }
817
818 if ( pWnd->isToolView() )
819 pWnd->m_bToolView = false;
820
821 if ( !m_pCurrentWindow )
822 emit lastChildViewClosed();
823#endif
824}
825
826//============== closeWindow ==============//
827void KMdiMainFrm::closeWindow( KMdiChildView *pWnd, bool layoutTaskBar )
828{
829 if ( !pWnd )
830 return ;
831 //Closes a child window. sends no close event : simply deletes it
832 m_pDocumentViews->removeRef( pWnd );
833 if ( m_pDocumentViews->count() == 0 )
834 m_pCurrentWindow = 0L;
835
836 if ( m_pTaskBar )
837 {
838 m_pTaskBar->removeWinButton( pWnd, layoutTaskBar );
839 }
840
841 if ( ( m_mdiMode == KMdi::TabPageMode ) || ( m_mdiMode == KMdi::IDEAlMode ) )
842 {
843 if ( !m_documentTabWidget )
844 return ; //oops
845 if ( m_pDocumentViews->count() == 0 )
846 m_pClose->hide();
847 pWnd->reparent( 0L, TQPoint( 0, 0 ) );
848 kdDebug(760) << "-------- 1" << endl;
849 if ( m_pDocumentViews->count() == 1 )
850 {
851 m_pDocumentViews->last() ->activate(); // all other views are activated by tab switch
852 }
853 }
854 if ( ( m_mdiMode == KMdi::TabPageMode ) || ( m_mdiMode == KMdi::IDEAlMode ) )
855 {
856 if ( m_pDocumentViews->count() == 0 )
857 {
858 if ( !m_pDockbaseAreaOfDocumentViews )
859 {
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 );
864 }
865#if 0
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;
871#endif
872
873 m_pClose->hide();
874 }
875#if 0
876 KDockWidget* pDockW = ( KDockWidget* ) pWnd->parentWidget();
877 pWnd->reparent( 0L, TQPoint( 0, 0 ) );
878 pDockW->setWidget( 0L );
879 if ( pDockW == m_pDockbaseOfTabPage )
880 {
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 )
885 {
886 m_pDockbaseOfTabPage = ( KDockWidget* ) pTab->page( cnt - 1 ); // different to the one deleted next
887 }
888 }
889 delete pDockW;
890#endif
891
892 delete pWnd;
893 if ( m_pDocumentViews->count() == 1 )
894 {
895 m_pDocumentViews->last() ->activate(); // all other views are activated by tab switch
896 }
897 }
898 else if ( pWnd->isAttached() )
899 {
900 m_pMdi->destroyChild( pWnd->mdiParent() );
901 }
902 else
903 {
904 delete pWnd;
905 // is not attached
906 if ( m_pMdi->getVisibleChildCount() > 0 )
907 {
908 setActiveWindow();
909 m_pCurrentWindow = 0L;
910 KMdiChildView* pView = m_pMdi->topChild() ->m_pClient;
911 if ( pView )
912 {
913 pView->activate();
914 }
915 }
916 else if ( m_pDocumentViews->count() > 0 )
917 {
918 if ( m_pDocumentViews->current() )
919 {
920 m_pDocumentViews->current() ->activate();
921 m_pDocumentViews->current() ->setFocus();
922 }
923 else
924 {
925 m_pDocumentViews->last() ->activate();
926 m_pDocumentViews->last() ->setFocus();
927 }
928 }
929 }
930
931 if ( !m_pCurrentWindow )
932 {
933 d->closeWindowAction->setEnabled(false);
934 emit lastChildViewClosed();
935 }
936}
937
938//================== findWindow =================//
939KMdiChildView* KMdiMainFrm::findWindow( const TQString& caption )
940{
941 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
942 for ( ; ( *it ); ++it )
943 {
944 if ( ( *it )->caption() == caption )
945 return ( *it );
946 }
947 return 0L;
948}
949
950//================== activeWindow ===================//
951KMdiChildView* KMdiMainFrm::activeWindow()
952{
953 return m_pCurrentWindow;
954}
955
956//================== windowExists ? =================//
957bool KMdiMainFrm::windowExists( KMdiChildView *pWnd, ExistsAs as )
958{
959 if ( ( as == ToolView ) || ( as == AnyView ) )
960 {
961 if ( m_pToolViews->contains( pWnd ) )
962 return true;
963 if ( as == ToolView )
964 return false;
965 }
966
967 if ( m_pDocumentViews->findRef( pWnd ) != -1 )
968 return true;
969
970 return false;
971}
972
973TQPopupMenu * KMdiMainFrm::windowPopup( KMdiChildView * pWnd, bool bIncludeTaskbarPopup )
974{
975 m_pWindowPopup->clear();
976 if ( bIncludeTaskbarPopup )
977 {
978 m_pWindowPopup->insertItem( i18n( "Window" ), taskBarPopup( pWnd, false ) );
979 m_pWindowPopup->insertSeparator();
980 }
981 return m_pWindowPopup;
982}
983
984//================ taskBarPopup =================//
985TQPopupMenu* KMdiMainFrm::taskBarPopup( KMdiChildView *pWnd, bool /*bIncludeWindowPopup*/ )
986{
987 //returns the g_pTaskBarPopup filled according to the KMdiChildView state
988 m_pTaskBarPopup->clear();
989 if ( pWnd->isAttached() )
990 {
991 m_pTaskBarPopup->insertItem( i18n( "Undock" ), pWnd, TQ_SLOT( detach() ) );
992 m_pTaskBarPopup->insertSeparator();
993 if ( pWnd->isMinimized() || pWnd->isMaximized() )
994 m_pTaskBarPopup->insertItem( i18n( "Restore" ), pWnd, TQ_SLOT( restore() ) );
995 if ( !pWnd->isMaximized() )
996 m_pTaskBarPopup->insertItem( i18n( "Maximize" ), pWnd, TQ_SLOT( maximize() ) );
997 if ( !pWnd->isMinimized() )
998 m_pTaskBarPopup->insertItem( i18n( "Minimize" ), pWnd, TQ_SLOT( minimize() ) );
999 }
1000 else
1001 m_pTaskBarPopup->insertItem( i18n( "Dock" ), pWnd, TQ_SLOT( attach() ) );
1002 m_pTaskBarPopup->insertSeparator();
1003 m_pTaskBarPopup->insertItem( i18n( "Close" ), pWnd, TQ_SLOT( close() ) );
1004 // the window has a view...get the window popup
1005 m_pTaskBarPopup->insertSeparator();
1006 m_pTaskBarPopup->insertItem( i18n( "Operations" ), windowPopup( pWnd, false ) ); //alvoid recursion
1007 return m_pTaskBarPopup;
1008}
1009
1010void KMdiMainFrm::slotDocCurrentChanged( TQWidget* pWidget )
1011{
1012 KMdiChildView * pWnd = static_cast<KMdiChildView*>( pWidget );
1013 pWnd->m_bMainframesActivateViewIsPending = true;
1014
1015 bool bActivateNecessary = true;
1016 if ( m_pCurrentWindow != pWnd )
1017 m_pCurrentWindow = pWnd;
1018
1019 if ( m_pTaskBar )
1020 m_pTaskBar->setActiveButton( pWnd );
1021
1022 if ( m_documentTabWidget && ( m_mdiMode == KMdi::TabPageMode || m_mdiMode == KMdi::IDEAlMode ) )
1023 {
1024 m_documentTabWidget->showPage( pWnd );
1025 pWnd->activate();
1026 }
1027 else
1028 {
1029 if ( pWnd->isAttached() )
1030 {
1031 if ( bActivateNecessary && ( m_pMdi->topChild() == pWnd->mdiParent() ) )
1032 pWnd->activate();
1033
1034 pWnd->mdiParent()->raiseAndActivate();
1035 }
1036 if ( !pWnd->isAttached() )
1037 {
1038 if ( bActivateNecessary )
1039 pWnd->activate();
1040
1041 m_pMdi->setTopChild( 0L ); // lose focus in the mainframe window
1042 if ( !pWnd->isActiveWindow() )
1043 pWnd->setActiveWindow();
1044
1045 pWnd->raise();
1046 }
1047 }
1048 if ( !switching() )
1049 activeWindow()->updateTimeStamp();
1050 emit collapseOverlapContainers();
1051 pWnd->m_bMainframesActivateViewIsPending = false;
1052}
1053
1054
1055void KMdiMainFrm::activateView( KMdiChildView* pWnd )
1056{
1057 pWnd->m_bMainframesActivateViewIsPending = true;
1058
1059 bool bActivateNecessary = true;
1060 if ( m_pCurrentWindow != pWnd )
1061 m_pCurrentWindow = pWnd;
1062 else
1063 {
1064 bActivateNecessary = false;
1065 // if this method is called as answer to view->activate(),
1066 // interrupt it because it's not necessary
1067 pWnd->m_bInterruptActivation = true;
1068 }
1069
1070 if ( m_pTaskBar )
1071 m_pTaskBar->setActiveButton( pWnd );
1072
1073 if ( m_documentTabWidget && m_mdiMode == KMdi::TabPageMode || m_mdiMode == KMdi::IDEAlMode )
1074 {
1075 m_documentTabWidget->showPage( pWnd );
1076 pWnd->activate();
1077 }
1078 else
1079 {
1080 if ( pWnd->isAttached() )
1081 {
1082 if ( bActivateNecessary && ( m_pMdi->topChild() == pWnd->mdiParent() ) )
1083 pWnd->activate();
1084
1085 pWnd->mdiParent() ->raiseAndActivate();
1086 }
1087 if ( !pWnd->isAttached() )
1088 {
1089 if ( bActivateNecessary )
1090 pWnd->activate();
1091
1092 m_pMdi->setTopChild( 0L ); // lose focus in the mainframe window
1093 if ( !pWnd->isActiveWindow() )
1094 pWnd->setActiveWindow();
1095
1096 pWnd->raise();
1097 }
1098 }
1099
1100 emit collapseOverlapContainers();
1101
1102 pWnd->m_bMainframesActivateViewIsPending = false;
1103}
1104
1105void KMdiMainFrm::taskbarButtonRightClicked( KMdiChildView *pWnd )
1106{
1107 activateView( pWnd ); // set focus
1108 //TQApplication::sendPostedEvents();
1109 taskBarPopup( pWnd, true ) ->popup( TQCursor::pos() );
1110}
1111
1112void KMdiMainFrm::childWindowCloseRequest( KMdiChildView *pWnd )
1113{
1114 KMdiViewCloseEvent * ce = new KMdiViewCloseEvent( pWnd );
1115 TQApplication::postEvent( this, ce );
1116}
1117
1118bool KMdiMainFrm::event( TQEvent* e )
1119{
1120 if ( e->type() == TQEvent::User )
1121 {
1122 KMdiChildView * pWnd = ( KMdiChildView* ) ( ( KMdiViewCloseEvent* ) e )->data();
1123 if ( pWnd != 0L )
1124 closeWindow( pWnd );
1125 return true;
1126 // A little hack: If MDI child views are moved implicietly by moving
1127 // the main widget they should know this too. Unfortunately there seems to
1128 // be no way to catch the move start / move stop situations for the main
1129 // widget in a clean way. (There is no MouseButtonPress/Release or
1130 // something like that.) Therefore we do the following: When we get the
1131 // "first" move event we start a timer and interprete it as "drag begin".
1132 // If we get the next move event and the timer is running we restart the
1133 // timer and don't do anything else. If the timer elapses (this meens we
1134 // haven't had any move event for a while) we interprete this as "drag
1135 // end". If the moving didn't stop actually, we will later get another
1136 // "drag begin", so we get a drag end too much, but this would be the same
1137 // as if the user would stop moving for a little while.
1138 // Actually we seem to be lucky that the timer does not elapse while we
1139 // are moving -> so we have no obsolete drag end / begin
1140 }
1141 else if ( isVisible() && e->type() == TQEvent::Move )
1142 {
1143 if ( m_pDragEndTimer->isActive() )
1144 {
1145 // this is not the first move -> stop old timer
1146 m_pDragEndTimer->stop();
1147 }
1148 else
1149 {
1150 // this is the first move -> send the drag begin to all concerned views
1151 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
1152 for ( ; ( *it ); ++it )
1153 {
1154 KMdiChildFrmDragBeginEvent dragBeginEvent( 0L );
1155 TQApplication::sendEvent( ( *it ), &dragBeginEvent );
1156 }
1157 }
1158 m_pDragEndTimer->start( 200, true ); // single shot after 200 ms
1159 }
1160
1161 return DockMainWindow::event( e );
1162}
1163
1164bool KMdiMainFrm::eventFilter( TQObject * /*obj*/, TQEvent *e )
1165{
1166 if ( e->type() == TQEvent::Resize && m_mdiMode == KMdi::ToplevelMode )
1167 {
1168 verifyToplevelHeight();
1169 return false; //let the rest of the resize magic do its work
1170 }
1171
1172 if ( e->type() == TQEvent::FocusIn )
1173 {
1174 TQFocusEvent * pFE = ( TQFocusEvent* ) e;
1175 if ( pFE->reason() == TQFocusEvent::ActiveWindow )
1176 {
1177 if ( m_pCurrentWindow && !m_pCurrentWindow->isHidden() &&
1178 !m_pCurrentWindow->isAttached() && m_pMdi->topChild() )
1179 {
1180 return true; // eat the event
1181 }
1182 }
1183 if ( m_pMdi )
1184 {
1185 static bool focusTCIsPending = false;
1186 if ( !focusTCIsPending && m_mdiMode == KMdi::ChildframeMode )
1187 {
1188 focusTCIsPending = true;
1189 m_pMdi->focusTopChild();
1190 focusTCIsPending = false;
1191 }
1192 }
1193 }
1194 else if ( e->type() == TQEvent::KeyRelease )
1195 {
1196 if ( switching() )
1197 {
1198 TDEAction * a = actionCollection() ->action( "view_last_window" ) ;
1199 if ( a )
1200 {
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 );
1207
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 ) )
1216 {
1217 activeWindow() ->updateTimeStamp();
1218 setSwitching( false );
1219 }
1220 return true;
1221 }
1222 else
1223 {
1224 kdDebug(760) << "TDEAction( \"view_last_window\") not found." << endl;
1225 }
1226 }
1227 }
1228 return false; // standard event processing
1229}
1230
1234void KMdiMainFrm::closeAllViews()
1235{
1236 //save the children first to a list, as removing invalidates our iterator
1237 TQValueList<KMdiChildView*> children;
1238 for ( KMdiChildView * w = m_pDocumentViews->first();w;w = m_pDocumentViews->next() )
1239 {
1240 children.append( w );
1241 }
1242 TQValueListIterator<KMdiChildView *> childIt;
1243 for ( childIt = children.begin(); childIt != children.end(); ++childIt )
1244 {
1245 ( *childIt )->close();
1246 }
1247}
1248
1249
1253void KMdiMainFrm::iconifyAllViews()
1254{
1255 kdDebug(760) << k_funcinfo << "minimizing all the views" << endl;
1256 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
1257 for ( ; ( *it ); ++it )
1258 ( *it )->minimize();
1259}
1260
1264void KMdiMainFrm::closeActiveView()
1265{
1266 kdDebug(760) << k_funcinfo << "closing the active view" << endl;
1267 if ( m_pCurrentWindow )
1268 m_pCurrentWindow->close();
1269}
1270
1272void KMdiMainFrm::findRootDockWidgets( TQPtrList<KDockWidget>* rootDockWidgetList, TQValueList<TQRect>* positionList )
1273{
1274 //nothing is valid
1275 if ( !rootDockWidgetList && !positionList )
1276 return ;
1277
1278 // since we set some windows to toplevel, we must consider the window manager's window frame
1279 const int frameBorderWidth = 7; // @todo: Can we / do we need to ask the window manager?
1280 const int windowTitleHeight = 10; // @todo: -"-
1281
1282 TQObjectList* pObjList = queryList( "KDockWidget" );
1283 if ( pObjList->isEmpty() )
1284 pObjList = queryList( "KDockWidget_Compat::KDockWidget" );
1285
1286 TQObjectListIt it( *pObjList );
1287 // for all dockwidgets (which are children of this mainwindow)
1288 while ( ( *it ) )
1289 {
1290 KDockWidget* dockWindow = 0L; /* pDockW */
1291 KDockWidget* rootDockWindow = 0L; /* pRootDockWindow */
1292 KDockWidget* undockCandidate = 0L; /* pUndockCandidate */
1293 TQWidget* pW = static_cast<TQWidget*>( ( *it ) );
1294
1295 // find the oldest ancestor of the current dockwidget that can be undocked
1296 while ( !pW->isTopLevel() )
1297 {
1298 if ( ::tqt_cast<KDockWidget*>( pW ) || pW->inherits( "KDockWidget_Compat::KDockWidget" ) )
1299 {
1300 undockCandidate = static_cast<KDockWidget*>( pW );
1301 if ( undockCandidate->enableDocking() != KDockWidget::DockNone )
1302 rootDockWindow = undockCandidate;
1303 }
1304 pW = pW->parentWidget();
1305 }
1306
1307 if ( rootDockWindow )
1308 {
1309 // if that oldest ancestor is not already in the list, append it
1310 bool found = false;
1311 if ( !rootDockWidgetList->isEmpty() )
1312 {
1313 TQPtrListIterator<KDockWidget> it2( *rootDockWidgetList );
1314 for ( ; it2.current() && !found; ++it2 )
1315 {
1316 dockWindow = it2.current();
1317 if ( dockWindow == rootDockWindow )
1318 found = true;
1319 }
1320 }
1321
1322 if ( !found || rootDockWidgetList->isEmpty() )
1323 {
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 );
1332 }
1333 }
1334 ++it;
1335 }
1336 delete pObjList;
1337}
1338
1342void KMdiMainFrm::switchToToplevelMode()
1343{
1344 if ( m_mdiMode == KMdi::ToplevelMode )
1345 {
1346 emit mdiModeHasBeenChangedTo( KMdi::ToplevelMode );
1347 return ;
1348 }
1349
1350 KMdi::MdiMode oldMdiMode = m_mdiMode;
1351
1352 const int frameBorderWidth = 7; // @todo: Can we / do we need to ask the window manager?
1353 setUndockPositioningOffset( TQPoint( 0, ( m_pTaskBar ? m_pTaskBar->height() : 0 ) + frameBorderWidth ) );
1354
1355 // 1.) select the dockwidgets to be undocked and store their geometry
1356 TQPtrList<KDockWidget> rootDockWidgetList;
1357 TQValueList<TQRect> positionList;
1358
1359 // 2.) undock the MDI views of KMDI
1360 switch( oldMdiMode )
1361 {
1362 case KMdi::ChildframeMode:
1363 finishChildframeMode();
1364 break;
1365 case KMdi::TabPageMode:
1366 finishTabPageMode();
1367 break;
1368 case KMdi::IDEAlMode:
1369 finishIDEAlMode();
1370 findRootDockWidgets( &rootDockWidgetList, &positionList );
1371 break;
1372 default:
1373 break; //do nothing
1374 }
1375
1376 // 3.) undock all these found oldest ancestors (being KDockWidgets)
1377 TQPtrListIterator<KDockWidget> kdwit( rootDockWidgetList );
1378 for ( ; ( *kdwit ); ++kdwit )
1379 ( *kdwit )->undock();
1380
1381 // 4.) recreate the MDI childframe area and hide it
1382 if ( oldMdiMode == KMdi::TabPageMode || oldMdiMode == KMdi::IDEAlMode )
1383 {
1384 if ( !m_pDockbaseAreaOfDocumentViews )
1385 {
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 );
1391 }
1392 // set this dock to main view
1393 setView( m_pDockbaseAreaOfDocumentViews );
1394 setMainDockWidget( m_pDockbaseAreaOfDocumentViews );
1395 }
1396 // TQApplication::sendPostedEvents(); //why do we need to empty the event queue?
1397 if ( !parentWidget() )
1398 {
1399 //if we don't have a parent widget ( which i expect we wouldn't )
1400 //make sure we take into account the size of the docks provided by
1401 //QMainWindow
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() );
1407 else
1408 {
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 );
1415 }
1416 }
1417
1418 //FIXME although i don't know what to fix
1419 // 5. show the child views again
1420 TQPtrListIterator<KMdiChildView> tdemdicvit( *m_pDocumentViews );
1421 for ( tdemdicvit.toFirst(); ( *tdemdicvit ); ++tdemdicvit )
1422 {
1423#ifdef TQ_WS_X11
1424 XSetTransientForHint( tqt_xdisplay(), ( *tdemdicvit )->winId(), winId() );
1425#endif
1426 ( *tdemdicvit )->show();
1427 }
1428
1429 // 6.) reset all memorized positions of the undocked ones and show them again
1430 TQValueList<TQRect>::Iterator qvlqrit;
1431 TQValueList<TQRect>::Iterator qvlEnd = positionList.end();
1432 for ( tdemdicvit.toFirst(), qvlqrit = positionList.begin() ; ( *tdemdicvit ) && qvlqrit != qvlEnd; ++tdemdicvit, ++qvlqrit )
1433 {
1434 ( *tdemdicvit )->setGeometry( ( *qvlqrit ) );
1435 ( *tdemdicvit )->show();
1436 }
1437
1438 m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockNone );
1439 m_mdiMode = KMdi::ToplevelMode;
1440
1441 kdDebug(760) << k_funcinfo << "Switch to toplevel mode completed" << endl;
1442 emit mdiModeHasBeenChangedTo( KMdi::ToplevelMode );
1443
1444}
1445
1446void KMdiMainFrm::finishToplevelMode()
1447{
1448 m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockCorner );
1449}
1450
1454void KMdiMainFrm::switchToChildframeMode()
1455{
1456 if ( m_mdiMode == KMdi::ChildframeMode )
1457 {
1458 emit mdiModeHasBeenChangedTo( KMdi::ChildframeMode );
1459 return ;
1460 }
1461
1462 TQPtrList<KDockWidget> rootDockWidgetList;
1463 TQValueList<TQRect> positionList;
1464
1465 if ( m_mdiMode == KMdi::TabPageMode )
1466 {
1467 kdDebug(760) << k_funcinfo << "finishing tab page mode" << endl;
1468 // select the dockwidgets to be undocked and store their geometry
1469 findRootDockWidgets( &rootDockWidgetList, &positionList );
1470 kdDebug(760) << k_funcinfo << "Found " << rootDockWidgetList.count() << " widgets to undock" << endl;
1471
1472 // undock all these found oldest ancestors (being KDockWidgets)
1473 TQPtrListIterator<KDockWidget> it( rootDockWidgetList );
1474 for ( ; ( *it ) ; ++it )
1475 ( *it )->undock();
1476
1477 finishTabPageMode();
1478 }
1479 else if ( m_mdiMode == KMdi::ToplevelMode )
1480 {
1481 finishToplevelMode();
1482 }
1483 else if ( m_mdiMode == KMdi::IDEAlMode )
1484 {
1485 kdDebug(760) << k_funcinfo << "finishing ideal mode" << endl;
1486 finishIDEAlMode( false );
1487
1488 // select the dockwidgets to be undocked and store their geometry
1489 findRootDockWidgets( &rootDockWidgetList, &positionList );
1490 kdDebug(760) << k_funcinfo << "Found " << rootDockWidgetList.count() << " widgets to undock" << endl;
1491
1492 // undock all these found oldest ancestors (being KDockWidgets)
1493 TQPtrListIterator<KDockWidget> it( rootDockWidgetList );
1494 for ( ; ( *it ) ; ++it )
1495 ( *it )->undock();
1496
1497 m_mdiMode = KMdi::TabPageMode;
1498 finishTabPageMode();
1499 m_mdiMode = KMdi::IDEAlMode;
1500 }
1501
1502 if ( !m_pDockbaseAreaOfDocumentViews )
1503 {
1504 // cover KMdi's childarea by a dockwidget
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;
1511 }
1512
1513 if ( m_pDockbaseAreaOfDocumentViews->isTopLevel() )
1514 {
1515 // set this dock to main view
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;
1521 }
1522 m_pDockbaseAreaOfDocumentViews->setWidget( m_pMdi ); //JW
1523 m_pDockbaseAreaOfDocumentViews->show();
1524
1525 if ( ( m_mdiMode == KMdi::TabPageMode ) || ( m_mdiMode == KMdi::IDEAlMode ) )
1526 {
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();
1531 }
1532
1533 if ( m_mdiMode == KMdi::ToplevelMode && m_pTempDockSession )
1534 {
1535 // restore the old dock scenario which we memorized at the time we switched to toplevel mode
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 );
1539 }
1540
1541 KMdi::MdiMode oldMdiMode = m_mdiMode;
1542 m_mdiMode = KMdi::ChildframeMode;
1543
1544 //FIXME although i don't know what to fix.
1545 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
1546 for ( ; ( *it ); ++it )
1547 {
1548 KMdiChildView* pView = ( *it );
1549 if ( !pView->isToolView() && pView->isAttached() )
1550 attachWindow( pView, true );
1551 }
1552 for ( it.toFirst(); ( *it ); ++it )
1553 {
1554 KMdiChildView* pView = ( *it );
1555 if ( !pView->isToolView() )
1556 pView->show();
1557 }
1558 if ( ( oldMdiMode == KMdi::ToplevelMode ) && !parentWidget() )
1559 {
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();
1566 }
1567 emit mdiModeHasBeenChangedTo( KMdi::ChildframeMode );
1568}
1569
1570void KMdiMainFrm::finishChildframeMode()
1571{
1572 // save the old dock scenario of the dockwidget-like tool views to a DOM tree
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 );
1579
1580 // detach all non-tool-views to toplevel
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 )
1584 {
1585 KMdiChildView* pView = ( *it );
1586 if ( pView->isToolView() )
1587 continue;
1588 if ( pView->isAttached() )
1589 {
1590 if ( pView->isMaximized() )
1591 pView->mdiParent()->setGeometry( 0, 0, m_pMdi->width(), m_pMdi->height() );
1592 detachWindow( pView, false );
1593 }
1594 }
1595}
1596
1600void KMdiMainFrm::switchToTabPageMode()
1601{
1602 if ( m_mdiMode == KMdi::TabPageMode )
1603 {
1604 emit mdiModeHasBeenChangedTo( KMdi::TabPageMode );
1605 return ; // nothing need to be done
1606 }
1607
1608 switch( m_mdiMode )
1609 {
1610 case KMdi::ChildframeMode:
1611 finishChildframeMode();
1612 break;
1613 case KMdi::ToplevelMode:
1614 finishToplevelMode();
1615 break;
1616 case KMdi::IDEAlMode:
1617 finishIDEAlMode( false );
1618 emit mdiModeHasBeenChangedTo( KMdi::TabPageMode );
1619 m_mdiMode = KMdi::TabPageMode;
1620 return;
1621 break;
1622 default:
1623 break;
1624 }
1625
1626 setupTabbedDocumentViewSpace();
1627 m_mdiMode = KMdi::TabPageMode;
1628 if ( m_pCurrentWindow )
1629 m_pCurrentWindow->setFocus();
1630
1631 m_pTaskBar->switchOn( false );
1632
1633 if ( m_pClose )
1634 {
1635 TQObject::connect( m_pClose, TQ_SIGNAL( clicked() ), this, TQ_SLOT( closeViewButtonPressed() ) );
1636 if ( m_pDocumentViews->count() > 0 )
1637 m_pClose->show();
1638 }
1639 else
1640 kdDebug(760) << "close button nonexistant. strange things might happen" << endl;
1641
1642 kdDebug(760) << "Switch to tab page mode complete" << endl;
1643 emit mdiModeHasBeenChangedTo( KMdi::TabPageMode );
1644}
1645
1646void KMdiMainFrm::finishTabPageMode()
1647{
1648 // if tabified, release all views from their docking covers
1649 if ( m_mdiMode == KMdi::TabPageMode )
1650 {
1651 m_pClose->hide();
1652 TQObject::disconnect( m_pClose, TQ_SIGNAL( clicked() ), this, TQ_SLOT( closeViewButtonPressed() ) );
1653
1654 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
1655 for ( ; it.current(); ++it )
1656 {
1657 KMdiChildView* pView = it.current();
1658 if ( pView->isToolView() )
1659 continue;
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 );
1668 // pView->reparent(0,0,p);
1669 pView->resize( sz );
1670 pView->setMinimumSize( mins.width(), mins.height() );
1671 pView->setMaximumSize( maxs.width(), maxs.height() );
1672 // ((KDockWidget*)pParent)->undock(); // this destroys the dockwiget cover, too
1673 // pParent->close();
1674 // delete pParent;
1675 // if (centralWidget() == pParent) {
1676 // setCentralWidget(0L); // avoid dangling pointer
1677 // }
1678 }
1679 delete m_documentTabWidget;
1680 m_documentTabWidget = 0;
1681 m_pTaskBar->switchOn( true );
1682 }
1683}
1684
1685
1686
1687void KMdiMainFrm::setupTabbedDocumentViewSpace()
1688{
1689 // resize to childframe mode size of the mainwindow if we were in toplevel mode
1690 if ( ( m_mdiMode == KMdi::ToplevelMode ) && !parentWidget() )
1691 {
1692 setMinimumHeight( m_oldMainFrmMinHeight );
1693 setMaximumHeight( m_oldMainFrmMaxHeight );
1694 resize( width(), m_oldMainFrmHeight );
1695 m_oldMainFrmHeight = 0;
1696 //tqDebug("TopLevelMode off");
1697 emit leftTopLevelMode();
1698 TQApplication::sendPostedEvents();
1699
1700 // restore the old dock szenario which we memorized at the time we switched to toplevel mode
1701 if ( m_pTempDockSession )
1702 {
1703 TQDomElement oldDockState = m_pTempDockSession->namedItem( "cur_dock_state" ).toElement();
1704 readDockConfig( oldDockState );
1705 }
1706 }
1707
1708#if 0
1709 if ( m_pDockbaseOfTabPage != m_pDockbaseAreaOfDocumentViews )
1710 {
1711 delete m_pDockbaseOfTabPage;
1712 m_pDockbaseOfTabPage = m_pDockbaseAreaOfDocumentViews;
1713 }
1714#endif
1715 delete m_documentTabWidget;
1716 m_documentTabWidget = new KMdiDocumentViewTabWidget( m_pDockbaseAreaOfDocumentViews );
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 )
1722 {
1723 KMdiChildView* pView = it4.current();
1724 m_documentTabWidget->addTab( pView, pView->icon() ? *( pView->icon() ) : TQPixmap(), pView->tabCaption() );
1725 /*
1726 connect(pView,TQ_SIGNAL(iconOrCaptionUdpated(TQWidget*,TQPixmap,const TQString&)),
1727 m_documentTabWidget,TQ_SLOT(updateView(TQWidget*,TQPixmap,const TQString&)));
1728 */
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& ) ) );
1731
1732 }
1733}
1734
1735
1736void KMdiMainFrm::setIDEAlModeStyle( int flags )
1737{
1738 d->m_styleIDEAlMode = flags; // see KMultiTabBar for the first 3 bits
1739 if ( m_leftContainer )
1740 {
1741 KMdiDockContainer * tmpL = ::tqt_cast<KMdiDockContainer*>( m_leftContainer->getWidget() );
1742 if ( tmpL )
1743 tmpL->setStyle( flags );
1744 }
1745
1746 if ( m_rightContainer )
1747 {
1748 KMdiDockContainer * tmpR = ::tqt_cast<KMdiDockContainer*>( m_rightContainer->getWidget() );
1749 if ( tmpR )
1750 tmpR->setStyle( flags );
1751 }
1752
1753 if ( m_topContainer )
1754 {
1755 KMdiDockContainer * tmpT = ::tqt_cast<KMdiDockContainer*>( m_topContainer->getWidget() );
1756 if ( tmpT )
1757 tmpT->setStyle( flags );
1758 }
1759
1760 if ( m_bottomContainer )
1761 {
1762 KMdiDockContainer * tmpB = ::tqt_cast<KMdiDockContainer*>( m_bottomContainer->getWidget() );
1763 if ( tmpB )
1764 tmpB->setStyle( flags );
1765 }
1766}
1767
1768void KMdiMainFrm::setToolviewStyle( int flag )
1769{
1770 if ( m_mdiMode == KMdi::IDEAlMode )
1771 {
1772 setIDEAlModeStyle( flag );
1773 }
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 )
1778 {
1779 KDockWidget *dockWidget = dynamic_cast<KDockWidget*>( it.data()->wrapperWidget() );
1780 if ( dockWidget )
1781 {
1782 switch ( flag )
1783 {
1784 case KMdi::IconOnly:
1785 dockWidget->setTabPageLabel( TQString::null );
1786 dockWidget->setPixmap( *( it.data()->wrappedWidget()->icon() ) );
1787 break;
1788 case KMdi::TextOnly:
1789 dockWidget->setPixmap(); //FIXME: Does not hide the icon in the IDEAl mode.
1790 dockWidget->setTabPageLabel( it.data()->wrappedWidget()->caption() );
1791 break;
1792 case KMdi::TextAndIcon:
1793 dockWidget->setPixmap( *( it.data()->wrappedWidget()->icon() ) );
1794 dockWidget->setTabPageLabel( it.data()->wrappedWidget()->caption() );
1795 default:
1796 break;
1797 }
1798 toolviewExists = true;
1799 }
1800 }
1801
1802 if ( toolviewExists )
1803 {
1804 //workaround for the above FIXME to make switching to TextOnly mode work in IDEAl as well. Be sure that this version of switch* is called.
1805 if ( m_mdiMode == KMdi::IDEAlMode && flag == KMdi::TextOnly )
1806 {
1807 KMdiMainFrm::switchToTabPageMode();
1808 KMdiMainFrm::switchToIDEAlMode();
1809 }
1810 else
1811 {
1812 writeDockConfig();
1813 readDockConfig();
1814 }
1815 }
1816}
1817
1821void KMdiMainFrm::switchToIDEAlMode()
1822{
1823 kdDebug(760) << k_funcinfo << "switching to IDEAl mode" << endl;
1824
1825 if ( m_mdiMode == KMdi::IDEAlMode )
1826 {
1827 emit mdiModeHasBeenChangedTo( KMdi::IDEAlMode );
1828 return ; // nothing need to be done
1829 }
1830
1831 switch( m_mdiMode )
1832 {
1833 case KMdi::ChildframeMode:
1834 finishChildframeMode();
1835 break;
1836 case KMdi::ToplevelMode:
1837 finishToplevelMode();
1838 break;
1839 case KMdi::TabPageMode:
1840 m_mdiMode = KMdi::IDEAlMode;
1841 setupToolViewsForIDEALMode();
1842 emit mdiModeHasBeenChangedTo( KMdi::IDEAlMode );
1843 return;
1844 break;
1845 default:
1846 break;
1847 }
1848
1849 setupTabbedDocumentViewSpace();
1850 m_mdiMode = KMdi::IDEAlMode;
1851 setupToolViewsForIDEALMode();
1852
1853 if ( m_pCurrentWindow )
1854 m_pCurrentWindow->setFocus();
1855
1856 m_pTaskBar->switchOn( false );
1857
1858 if ( m_pClose )
1859 {
1860 TQObject::connect( m_pClose, TQ_SIGNAL( clicked() ), this, TQ_SLOT( closeViewButtonPressed() ) );
1861 if ( m_pDocumentViews->count() > 0 )
1862 m_pClose->show();
1863 }
1864 else
1865 kdWarning(760) << k_funcinfo << "close button pointer does not exist!" << endl;
1866
1867 kdDebug(760) << k_funcinfo << "switch to IDEAl mode complete" << endl;
1868
1869 emit mdiModeHasBeenChangedTo( KMdi::IDEAlMode );
1870}
1871
1872
1873void KMdiMainFrm::dockToolViewsIntoContainers( TQPtrList<KDockWidget>& widgetsToReparent, KDockWidget *container )
1874{
1875 TQPtrListIterator<KDockWidget> it( widgetsToReparent );
1876 for ( ; ( *it ); ++it )
1877 {
1878 ( *it )->manualDock( container, KDockWidget::DockCenter, 20 );
1879 ( *it )->loseFormerBrotherDockWidget();
1880 }
1881}
1882
1883void KMdiMainFrm::findToolViewsDockedToMain( TQPtrList<KDockWidget>* list, KDockWidget::DockPosition dprtmw )
1884{
1885 KDockWidget* mainDock = getMainDockWidget();
1886 if ( mainDock->parentDockTabGroup() )
1887 {
1888 mainDock = dynamic_cast<KDockWidget*>( mainDock->parentDockTabGroup()->parent() );
1889 // FIXME: will likely crash below due to unchecked cast
1890 }
1891
1892 if ( !mainDock )
1893 {
1894 kdDebug(760) << k_funcinfo << "mainDock invalid. No main dock widget found." << endl;
1895 return;
1896 }
1897
1898 KDockWidget* widget = mainDock->findNearestDockWidget( dprtmw );
1899 if ( widget && widget->parentDockTabGroup() )
1900 {
1901 widget = static_cast<KDockWidget*>( widget->parentDockTabGroup() ->parent() );
1902
1903 if ( widget )
1904 {
1905 KDockTabGroup* tg = dynamic_cast<KDockTabGroup*>( widget->getWidget() );
1906 if ( tg )
1907 {
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 ) ) );
1911 }
1912 else
1913 list->append( widget );
1914 }
1915 else
1916 kdDebug(760) << k_funcinfo << "no widget found" << endl;
1917 }
1918 else
1919 kdDebug(760) << "No main dock widget found" << endl;
1920}
1921
1922
1923void KMdiMainFrm::setupToolViewsForIDEALMode()
1924{
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" );
1929
1930 KDockWidget *mainDock = getMainDockWidget();
1931 KDockWidget *w = mainDock;
1932 if ( mainDock->parentDockTabGroup() )
1933 w = static_cast<KDockWidget*>( mainDock->parentDockTabGroup()->parent() );
1934
1935 TQPtrList<KDockWidget> leftReparentWidgets;
1936 TQPtrList<KDockWidget> rightReparentWidgets;
1937 TQPtrList<KDockWidget> bottomReparentWidgets;
1938 TQPtrList<KDockWidget> topReparentWidgets;
1939
1940 if ( mainDock->parentDockTabGroup() )
1941 mainDock = static_cast<KDockWidget*>( mainDock->parentDockTabGroup() ->parent() );
1942
1943 findToolViewsDockedToMain( &leftReparentWidgets, KDockWidget::DockLeft );
1944 findToolViewsDockedToMain( &rightReparentWidgets, KDockWidget::DockRight );
1945 findToolViewsDockedToMain( &bottomReparentWidgets, KDockWidget::DockBottom );
1946 findToolViewsDockedToMain( &topReparentWidgets, KDockWidget::DockTop );
1947
1948 mainDock->setEnableDocking( KDockWidget::DockNone ); //::DockCorner);
1949 mainDock->setDockSite( KDockWidget::DockCorner );
1950
1951
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 );
1956 tmpDC->init();
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* ) ) );
1962
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 );
1966 tmpDC->init();
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* ) ) );
1972
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 );
1976 tmpDC->init();
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* ) ) );
1982
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 );
1986 tmpDC->init();
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* ) ) );
1992
1993 m_leftContainer->setDockSite( KDockWidget::DockCenter );
1994 m_rightContainer->setDockSite( KDockWidget::DockCenter );
1995 m_topContainer->setDockSite( KDockWidget::DockCenter );
1996 m_bottomContainer->setDockSite( KDockWidget::DockCenter );
1997
1998 dockToolViewsIntoContainers( leftReparentWidgets, m_leftContainer );
1999 dockToolViewsIntoContainers( rightReparentWidgets, m_rightContainer );
2000 dockToolViewsIntoContainers( bottomReparentWidgets, m_bottomContainer );
2001 dockToolViewsIntoContainers( topReparentWidgets, m_topContainer );
2002
2003
2004 dockManager->setSpecialLeftDockContainer( m_leftContainer );
2005 dockManager->setSpecialRightDockContainer( m_rightContainer );
2006 dockManager->setSpecialTopDockContainer( m_topContainer );
2007 dockManager->setSpecialBottomDockContainer( m_bottomContainer );
2008
2009
2010 ( ( KMdiDockContainer* ) ( m_leftContainer->getWidget() ) ) ->hideIfNeeded();
2011 ( ( KMdiDockContainer* ) ( m_rightContainer->getWidget() ) ) ->hideIfNeeded();
2012 ( ( KMdiDockContainer* ) ( m_topContainer->getWidget() ) ) ->hideIfNeeded();
2013 ( ( KMdiDockContainer* ) ( m_bottomContainer->getWidget() ) ) ->hideIfNeeded();
2014
2015}
2016
2017
2018
2019void KMdiMainFrm::finishIDEAlMode( bool full )
2020{
2021 // if tabified, release all views from their docking covers
2022 if ( m_mdiMode == KMdi::IDEAlMode )
2023 {
2024 assert( m_pClose );
2025 m_pClose->hide();
2026 TQObject::disconnect( m_pClose, TQ_SIGNAL( clicked() ), this, TQ_SLOT( closeViewButtonPressed() ) );
2027
2028
2029 TQStringList leftNames;
2030 leftNames = prepareIdealToTabs( m_leftContainer );
2031 int leftWidth = m_leftContainer->width();
2032
2033 TQStringList rightNames;
2034 rightNames = prepareIdealToTabs( m_rightContainer );
2035 int rightWidth = m_rightContainer->width();
2036
2037 TQStringList topNames;
2038 topNames = prepareIdealToTabs( m_topContainer );
2039 int topHeight = m_topContainer->height();
2040
2041 TQStringList bottomNames;
2042 bottomNames = prepareIdealToTabs( m_bottomContainer );
2043 int bottomHeight = m_bottomContainer->height();
2044
2045
2046 kdDebug(760) << "leftNames" << leftNames << endl;
2047 kdDebug(760) << "rightNames" << rightNames << endl;
2048 kdDebug(760) << "topNames" << topNames << endl;
2049 kdDebug(760) << "bottomNames" << bottomNames << endl;
2050
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;
2058 m_topContainer = 0;
2059
2060
2061 idealToolViewsToStandardTabs( bottomNames, KDockWidget::DockBottom, bottomHeight );
2062 idealToolViewsToStandardTabs( leftNames, KDockWidget::DockLeft, leftWidth );
2063 idealToolViewsToStandardTabs( rightNames, KDockWidget::DockRight, rightWidth );
2064 idealToolViewsToStandardTabs( topNames, KDockWidget::DockTop, topHeight );
2065
2066 TQApplication::sendPostedEvents();
2067
2068 if ( !full )
2069 return ;
2070
2071 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
2072 for ( ; it.current(); ++it )
2073 {
2074 KMdiChildView* pView = it.current();
2075 if ( pView->isToolView() )
2076 continue;
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 );
2085 pView->setMinimumSize( mins.width(), mins.height() );
2086 pView->setMaximumSize( maxs.width(), maxs.height() );
2087 KDockWidget* pDockW = 0L;
2088 // find the oldest ancestor of the current dockwidget that can be undocked
2089 do
2090 {
2091 if ( pParent->inherits( "KDockWidget" ) || pParent->inherits( "KDockWidget_Compat::KDockWidget" ) )
2092 {
2093 pDockW = ( KDockWidget* ) pParent;
2094 pDockW->undock(); // this destroys the dockwiget cover, too
2095 if ( pParent != m_pDockbaseAreaOfDocumentViews )
2096 {
2097 pParent->close();
2098 delete pParent;
2099 }
2100 }
2101 else
2102 {
2103 pParent = pParent->parentWidget();
2104 }
2105 }
2106 while ( pParent && !pDockW );
2107 if ( centralWidget() == pParent )
2108 {
2109 setCentralWidget( 0L ); // avoid dangling pointer
2110 }
2111 }
2112 m_pTaskBar->switchOn( true );
2113
2114 }
2115
2116}
2117
2118TQStringList KMdiMainFrm::prepareIdealToTabs( KDockWidget* container )
2119{
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 )
2123 {
2124 KDockWidget* dw = ( KDockWidget* ) manager() ->getDockWidgetFromName( *it );
2125 dw->undock();
2126 dw->setLatestKDockContainer( 0 );
2127 dw->loseFormerBrotherDockWidget();
2128 }
2129 return widgetNames;
2130}
2131
2132void KMdiMainFrm::idealToolViewsToStandardTabs( TQStringList widgetNames, KDockWidget::DockPosition pos, int size )
2133{
2134 Q_UNUSED( size )
2135
2136 KDockWidget * mainDock = getMainDockWidget();
2137 if ( mainDock->parentDockTabGroup() )
2138 {
2139 mainDock = static_cast<KDockWidget*>( mainDock->parentDockTabGroup() ->parent() );
2140 }
2141
2142 if ( widgetNames.count() > 0 )
2143 {
2144 TQStringList::iterator it = widgetNames.begin();
2145 KDockWidget *dwpd = manager() ->getDockWidgetFromName( *it );
2146 if ( !dwpd )
2147 {
2148 kdDebug(760) << "Fatal error in finishIDEAlMode" << endl;
2149 return ;
2150 }
2151 dwpd->manualDock( mainDock, pos, 20 );
2152 ++it;
2153 for ( ;it != widgetNames.end();++it )
2154 {
2155 KDockWidget *tmpdw = manager() ->getDockWidgetFromName( *it );
2156 if ( !tmpdw )
2157 {
2158 kdDebug(760) << "Fatal error in finishIDEAlMode" << endl;
2159 return ;
2160 }
2161 tmpdw->manualDock( dwpd, KDockWidget::DockCenter, 20 );
2162 }
2163
2164#if 0
2165 TQWidget *wid = dwpd->parentDockTabGroup();
2166 if ( !wid )
2167 wid = dwpd;
2168 wid->setGeometry( 0, 0, 20, 20 );
2169 /* wid->resize(
2170 ((pos==KDockWidget::DockLeft) || (pos==KDockWidget::DockRight))?size:wid->width(),
2171 ((pos==KDockWidget::DockLeft) || (pos==KDockWidget::DockRight))?wid->height():size);
2172 */
2173#endif
2174
2175 }
2176
2177}
2178
2179
2187void KMdiMainFrm::setMenuForSDIModeSysButtons( KMenuBar* pMenuBar )
2188{
2189 if ( m_bSDIApplication ) // there are no buttons in the menubar in this mode (although the view is always maximized)
2190 return ;
2191
2192 m_pMainMenuBar = pMenuBar;
2193 if ( m_pMainMenuBar == 0L )
2194 return ; // use setMenuForSDIModeSysButtons( 0L) for unsetting the external main menu!
2195
2196 if ( !m_pUndock )
2197 m_pUndock = new TQToolButton( pMenuBar );
2198 if ( !m_pRestore )
2199 m_pRestore = new TQToolButton( pMenuBar );
2200 if ( !m_pMinimize )
2201 m_pMinimize = new TQToolButton( pMenuBar );
2202 if ( !m_pClose )
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 );
2208
2209 setSysButtonsAtMenuPosition();
2210
2211 delete m_pUndockButtonPixmap;
2212 delete m_pMinButtonPixmap;
2213 delete m_pRestoreButtonPixmap;
2214 delete m_pCloseButtonPixmap;
2215 // create the decoration pixmaps
2216 if ( frameDecorOfAttachedViews() == KMdi::Win95Look )
2217 {
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 );
2222 }
2223 else if ( frameDecorOfAttachedViews() == KMdi::KDE1Look )
2224 {
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 );
2233 }
2234 else if ( frameDecorOfAttachedViews() == KMdi::KDELook )
2235 {
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 );
2240 }
2241 else
2242 { // kde2laptop look
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 );
2247 }
2248
2249 m_pUndock->hide();
2250 m_pMinimize->hide();
2251 m_pRestore->hide();
2252 m_pClose->hide();
2253
2254 m_pUndock->setPixmap( *m_pUndockButtonPixmap );
2255 m_pMinimize->setPixmap( *m_pMinButtonPixmap );
2256 m_pRestore->setPixmap( *m_pRestoreButtonPixmap );
2257 m_pClose->setPixmap( *m_pCloseButtonPixmap );
2258}
2259
2260void KMdiMainFrm::setSysButtonsAtMenuPosition()
2261{
2262 if ( m_pMainMenuBar == 0L )
2263 return ;
2264 if ( m_pMainMenuBar->parentWidget() == 0L )
2265 return ;
2266
2267 int menuW = m_pMainMenuBar->parentWidget() ->width();
2268 int h;
2269 int y;
2270 if ( frameDecorOfAttachedViews() == KMdi::Win95Look )
2271 h = 16;
2272 else if ( frameDecorOfAttachedViews() == KMdi::KDE1Look )
2273 h = 20;
2274 else if ( frameDecorOfAttachedViews() == KMdi::KDELook )
2275 h = 16;
2276 else
2277 h = 14;
2278 y = m_pMainMenuBar->height() / 2 - h / 2;
2279
2280 if ( frameDecorOfAttachedViews() == KMdi::KDELaptopLook )
2281 {
2282 int w = 27;
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 );
2286 }
2287 else
2288 {
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 );
2293 }
2294}
2295
2297void KMdiMainFrm::activateNextWin()
2298{
2299 KMdiIterator<KMdiChildView*>* it = createIterator();
2300 KMdiChildView* aWin = activeWindow();
2301 for ( it->first(); !it->isDone(); it->next() )
2302 {
2303 if ( it->currentItem() == aWin )
2304 {
2305 it->next();
2306 if ( !it->currentItem() )
2307 {
2308 it->first();
2309 }
2310 if ( it->currentItem() )
2311 {
2312 activateView( it->currentItem() );
2313 }
2314 break;
2315 }
2316 }
2317 delete it;
2318}
2319
2321void KMdiMainFrm::activatePrevWin()
2322{
2323 KMdiIterator<KMdiChildView*>* it = createIterator();
2324 KMdiChildView* aWin = activeWindow();
2325 for ( it->first(); !it->isDone(); it->next() )
2326 {
2327 if ( it->currentItem() == aWin )
2328 {
2329 it->prev();
2330 if ( !it->currentItem() )
2331 {
2332 it->last();
2333 }
2334 if ( it->currentItem() )
2335 {
2336 activateView( it->currentItem() );
2337 }
2338 break;
2339 }
2340 }
2341 delete it;
2342}
2343
2345void KMdiMainFrm::activateFirstWin()
2346{
2347 m_bSwitching= true; // flag that we are currently switching between windows
2348 KMdiIterator<KMdiChildView*>* it = createIterator();
2349 TQMap<TQDateTime, KMdiChildView*> m;
2350 for ( it->first(); !it->isDone(); it->next() )
2351 {
2352 m.insert( it->currentItem() ->getTimeStamp(), it->currentItem() );
2353 }
2354
2355 if ( !activeWindow() )
2356 return ;
2357
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() )
2362 {
2363 ++newPos;
2364 }
2365 if ( newPos != m.end() )
2366 { // look ahead
2367 ++pos;
2368 }
2369 else
2370 {
2371 pos = m.begin();
2372 }
2373 activateView( pos.data() );
2374 delete it;
2375}
2376
2378void KMdiMainFrm::activateLastWin()
2379{
2380 m_bSwitching= true; // flag that we are currently switching between windows
2381 KMdiIterator<KMdiChildView*>* it = createIterator();
2382 TQMap<TQDateTime, KMdiChildView*> m;
2383 for ( it->first(); !it->isDone(); it->next() )
2384 {
2385 m.insert( it->currentItem() ->getTimeStamp(), it->currentItem() );
2386 }
2387
2388 if ( !activeWindow() )
2389 return ;
2390
2391 TQDateTime current = activeWindow() ->getTimeStamp();
2392 TQMap<TQDateTime, KMdiChildView*>::iterator pos( m.find( current ) );
2393 if ( pos != m.begin() )
2394 {
2395 --pos;
2396 }
2397 else
2398 {
2399 pos = m.end();
2400 --pos;
2401 }
2402 activateView( pos.data() );
2403 delete it;
2404}
2405
2407void KMdiMainFrm::activateView( int index )
2408{
2409 KMdiChildView * pView = m_pDocumentViews->first();
2410 for ( int i = 0; pView && ( i < index ); i++ )
2411 {
2412 pView = m_pDocumentViews->next();
2413 }
2414 if ( pView )
2415 {
2416 pView->activate();
2417 }
2418}
2419
2421void KMdiMainFrm::setEnableMaximizedChildFrmMode( bool enableMaxChildFrameMode )
2422{
2423 if ( enableMaxChildFrameMode )
2424 {
2425 kdDebug(760) << k_funcinfo << "Turning on maximized child frame mode" << endl;
2426 m_bMaximizedChildFrmMode = true;
2427
2428 KMdiChildFrm* pCurrentChild = m_pMdi->topChild();
2429
2430 //If we have no child or there is no menubar, we do nothing
2431 if ( !pCurrentChild || !m_pMainMenuBar )
2432 return ;
2433
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();
2438 m_pUndock->show();
2439 m_pRestore->show();
2440
2441 if ( frameDecorOfAttachedViews() == KMdi::KDELaptopLook )
2442 {
2443 m_pMainMenuBar->insertItem( TQPixmap( kde2laptop_closebutton_menu ), m_pMdi->topChild(), TQ_SLOT( closePressed() ), 0, -1, 0 );
2444 }
2445 else
2446 {
2447 m_pMainMenuBar->insertItem( *pCurrentChild->icon(), pCurrentChild->systemMenu(), -1, 0 );
2448 if ( m_pClose )
2449 {
2450 TQObject::connect( m_pClose, TQ_SIGNAL( clicked() ), pCurrentChild, TQ_SLOT( closePressed() ) );
2451 m_pClose->show();
2452 }
2453 else
2454 kdDebug(760) << k_funcinfo << "no close button. things won't behave correctly" << endl;
2455 }
2456 }
2457 else
2458 {
2459 if ( !m_bMaximizedChildFrmMode )
2460 return ; // already set, nothing to do
2461
2462 kdDebug(760) << k_funcinfo << "Turning off maximized child frame mode" << endl;
2463 m_bMaximizedChildFrmMode = false;
2464
2465 KMdiChildFrm* pFrmChild = m_pMdi->topChild();
2466 if ( pFrmChild && pFrmChild->m_pClient && pFrmChild->state() == KMdiChildFrm::Maximized )
2467 {
2468 pFrmChild->m_pClient->restore();
2469 switchOffMaximizeModeForMenu( pFrmChild );
2470 }
2471 }
2472}
2473
2475void KMdiMainFrm::switchOffMaximizeModeForMenu( KMdiChildFrm* oldChild )
2476{
2477 // if there is no menubar given, those system buttons aren't possible
2478 if ( !m_pMainMenuBar )
2479 return ;
2480
2481 m_pMainMenuBar->removeItem( m_pMainMenuBar->idAt( 0 ) );
2482
2483 if ( oldChild )
2484 {
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() ) );
2490 }
2491 m_pUndock->hide();
2492 m_pMinimize->hide();
2493 m_pRestore->hide();
2494 m_pClose->hide();
2495}
2496
2498void KMdiMainFrm::updateSysButtonConnections( KMdiChildFrm* oldChild, KMdiChildFrm* newChild )
2499{
2500 //tqDebug("updateSysButtonConnections");
2501 // if there is no menubar given, those system buttons aren't possible
2502 if ( !m_pMainMenuBar )
2503 return ;
2504
2505 if ( newChild )
2506 {
2507 if ( frameDecorOfAttachedViews() == KMdi::KDELaptopLook )
2508 m_pMainMenuBar->insertItem( TQPixmap( kde2laptop_closebutton_menu ), newChild, TQ_SLOT( closePressed() ), 0, -1, 0 );
2509 else
2510 m_pMainMenuBar->insertItem( *newChild->icon(), newChild->systemMenu(), -1, 0 );
2511 }
2512
2513 if ( oldChild )
2514 {
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() ) );
2521 }
2522 if ( newChild )
2523 {
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() ) );
2529 }
2530}
2531
2533bool KMdiMainFrm::isViewTaskBarOn()
2534{
2535 if ( m_pTaskBar )
2536 return m_pTaskBar->isSwitchedOn();
2537 else
2538 return false;
2539}
2540
2542void KMdiMainFrm::showViewTaskBar()
2543{
2544 if ( m_pTaskBar )
2545 m_pTaskBar->switchOn( true );
2546}
2547
2549void KMdiMainFrm::hideViewTaskBar()
2550{
2551 if ( m_pTaskBar )
2552 m_pTaskBar->switchOn( false );
2553}
2554
2555//=============== fillWindowMenu ===============//
2556void KMdiMainFrm::fillWindowMenu()
2557{
2558 bool tabPageMode = false;
2559 if ( m_mdiMode == KMdi::TabPageMode )
2560 tabPageMode = true;
2561
2562 bool IDEAlMode = false;
2563 if ( m_mdiMode == KMdi::IDEAlMode )
2564 IDEAlMode = true;
2565
2566 bool noViewOpened = false;
2567 if ( m_pDocumentViews->isEmpty() )
2568 noViewOpened = true;
2569
2570 // construct the menu and its submenus
2571 if ( !m_bClearingOfWindowMenuBlocked )
2572 m_pWindowMenu->clear();
2573
2574 d->closeWindowAction->plug(m_pWindowMenu);
2575
2576 int closeAllId = m_pWindowMenu->insertItem( i18n( "Close &All" ), this, TQ_SLOT( closeAllViews() ) );
2577 if ( noViewOpened )
2578 {
2579 d->closeWindowAction->setEnabled(false);
2580 m_pWindowMenu->setItemEnabled( closeAllId, false );
2581 }
2582
2583 if ( !tabPageMode && !IDEAlMode )
2584 {
2585 int iconifyId = m_pWindowMenu->insertItem( i18n( "&Minimize All" ), this, TQ_SLOT( iconifyAllViews() ) );
2586 if ( noViewOpened )
2587 m_pWindowMenu->setItemEnabled( iconifyId, false );
2588 }
2589
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 )
2598 {
2599 case KMdi::ToplevelMode:
2600 m_pMdiModeMenu->setItemChecked( m_pMdiModeMenu->idAt( 0 ), true );
2601 break;
2602 case KMdi::ChildframeMode:
2603 m_pMdiModeMenu->setItemChecked( m_pMdiModeMenu->idAt( 1 ), true );
2604 break;
2605 case KMdi::TabPageMode:
2606 m_pMdiModeMenu->setItemChecked( m_pMdiModeMenu->idAt( 2 ), true );
2607 break;
2608 case KMdi::IDEAlMode:
2609 m_pMdiModeMenu->setItemChecked( m_pMdiModeMenu->idAt( 3 ), true );
2610 break;
2611 default:
2612 break;
2613 }
2614
2615 m_pWindowMenu->insertSeparator();
2616 if ( !tabPageMode && !IDEAlMode )
2617 {
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 )
2628 {
2629 m_pWindowMenu->setItemEnabled( placMenuId, false );
2630 }
2631 m_pWindowMenu->insertSeparator();
2632 int dockUndockId = m_pWindowMenu->insertItem( i18n( "&Dock/Undock" ), m_pDockMenu );
2633 m_pDockMenu->clear();
2634 m_pWindowMenu->insertSeparator();
2635 if ( noViewOpened )
2636 {
2637 m_pWindowMenu->setItemEnabled( placMenuId, false );
2638 m_pWindowMenu->setItemEnabled( dockUndockId, false );
2639 }
2640 }
2641 int entryCount = m_pWindowMenu->count();
2642
2643 // for all child frame windows: give an ID to every window and connect them in the end with windowMenuItemActivated()
2644 int i = 100;
2645 KMdiChildView* pView = 0L;
2646 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
2647 TQValueList<TQDateTime> timeStamps;
2648 for ( ; it.current(); ++it )
2649 {
2650 pView = it.current();
2651 TQDateTime timeStamp( pView->getTimeStamp() );
2652
2653 if ( pView->isToolView() )
2654 {
2655 continue;
2656 }
2657
2658 TQString item;
2659 // set titles of minimized windows in brackets
2660 if ( pView->isMinimized() )
2661 {
2662 item += "(";
2663 item += pView->caption();
2664 item += ")";
2665 }
2666 else
2667 {
2668 item += " ";
2669 item += pView->caption();
2670 }
2671
2672 // insert the window entry sorted by access time
2673 unsigned int indx;
2674 unsigned int windowItemCount = m_pWindowMenu->count() - entryCount;
2675 bool inserted = false;
2676 TQString tmpString;
2677 TQValueList<TQDateTime>::iterator timeStampIterator = timeStamps.begin();
2678 for ( indx = 0; indx <= windowItemCount; indx++, ++timeStampIterator )
2679 {
2680 bool putHere = false;
2681 if ( ( *timeStampIterator ) < timeStamp )
2682 {
2683 putHere = true;
2684 timeStamps.insert( timeStampIterator, timeStamp );
2685 }
2686 if ( putHere )
2687 {
2688 m_pWindowMenu->insertItem( item, pView, TQ_SLOT( slot_clickedInWindowMenu() ), 0, -1, indx + entryCount );
2689 if ( pView == m_pCurrentWindow )
2690 {
2691 m_pWindowMenu->setItemChecked( m_pWindowMenu->idAt( indx + entryCount ), true );
2692 }
2693 pView->setWindowMenuID( i );
2694 if ( !tabPageMode )
2695 {
2696 m_pDockMenu->insertItem( item, pView, TQ_SLOT( slot_clickedInDockMenu() ), 0, -1, indx );
2697 if ( pView->isAttached() )
2698 {
2699 m_pDockMenu->setItemChecked( m_pDockMenu->idAt( indx ), true );
2700 }
2701 }
2702 inserted = true;
2703 break;
2704 indx = windowItemCount + 1; // break the loop
2705 }
2706 }
2707 if ( !inserted )
2708 { // append it
2709 m_pWindowMenu->insertItem( item, pView, TQ_SLOT( slot_clickedInWindowMenu() ), 0, -1, windowItemCount + entryCount );
2710 if ( pView == m_pCurrentWindow )
2711 {
2712 m_pWindowMenu->setItemChecked( m_pWindowMenu->idAt( windowItemCount + entryCount ), true );
2713 }
2714 pView->setWindowMenuID( i );
2715 if ( !tabPageMode )
2716 {
2717 m_pDockMenu->insertItem( item, pView, TQ_SLOT( slot_clickedInDockMenu() ), 0, -1, windowItemCount );
2718 if ( pView->isAttached() )
2719 {
2720 m_pDockMenu->setItemChecked( m_pDockMenu->idAt( windowItemCount ), true );
2721 }
2722 }
2723 }
2724 i++;
2725 }
2726}
2727
2728//================ windowMenuItemActivated ===============//
2729
2730void KMdiMainFrm::windowMenuItemActivated( int id )
2731{
2732 if ( id < 100 )
2733 return ;
2734 id -= 100;
2735 KMdiChildView *pView = m_pDocumentViews->at( id );
2736 if ( !pView )
2737 return ;
2738 if ( pView->isMinimized() )
2739 pView->minimize();
2740 if ( m_mdiMode != KMdi::TabPageMode )
2741 {
2742 KMdiChildFrm * pTopChild = m_pMdi->topChild();
2743 if ( pTopChild )
2744 {
2745 if ( ( pView == pTopChild->m_pClient ) && pView->isAttached() )
2746 {
2747 return ;
2748 }
2749 }
2750 }
2751 activateView( pView );
2752}
2753
2754//================ dockMenuItemActivated ===============//
2755
2756void KMdiMainFrm::dockMenuItemActivated( int id )
2757{
2758 if ( id < 100 )
2759 return ;
2760 id -= 100;
2761 KMdiChildView *pView = m_pDocumentViews->at( id );
2762 if ( !pView )
2763 return ;
2764 if ( pView->isMinimized() )
2765 pView->minimize();
2766 if ( pView->isAttached() )
2767 {
2768 detachWindow( pView, true );
2769 }
2770 else
2771 { // is detached
2772 attachWindow( pView, true );
2773 }
2774}
2775
2776//================ popupWindowMenu ===============//
2777
2778void KMdiMainFrm::popupWindowMenu( TQPoint p )
2779{
2780 if ( !isFakingSDIApplication() )
2781 {
2782 m_pWindowMenu->popup( p );
2783 }
2784}
2785
2786//================ dragEndTimeOut ===============//
2787void KMdiMainFrm::dragEndTimeOut()
2788{
2789 // send drag end to all concerned views.
2790 KMdiChildView * pView;
2791 for ( m_pDocumentViews->first(); ( pView = m_pDocumentViews->current() ) != 0L; m_pDocumentViews->next() )
2792 {
2793 KMdiChildFrmDragEndEvent dragEndEvent( 0L );
2794 TQApplication::sendEvent( pView, &dragEndEvent );
2795 }
2796}
2797
2798//================ setFrameDecorOfAttachedViews ===============//
2799
2800void KMdiMainFrm::setFrameDecorOfAttachedViews( int frameDecor )
2801{
2802 switch ( frameDecor )
2803 {
2804 case 0:
2805 m_frameDecoration = KMdi::Win95Look;
2806 break;
2807 case 1:
2808 m_frameDecoration = KMdi::KDE1Look;
2809 break;
2810 case 2:
2811 m_frameDecoration = KMdi::KDELook;
2812 break;
2813 case 3:
2814 m_frameDecoration = KMdi::KDELaptopLook;
2815 break;
2816 default:
2817 tqDebug( "unknown MDI decoration" );
2818 break;
2819 }
2820 setMenuForSDIModeSysButtons( m_pMainMenuBar );
2821 TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
2822 for ( ; it.current(); ++it )
2823 {
2824 KMdiChildView* pView = it.current();
2825 if ( pView->isToolView() )
2826 continue;
2827 if ( pView->isAttached() )
2828 pView->mdiParent() ->redecorateButtons();
2829 }
2830}
2831
2832void KMdiMainFrm::fakeSDIApplication()
2833{
2834 m_bSDIApplication = true;
2835 if ( m_pTaskBar )
2836 m_pTaskBar->close();
2837 m_pTaskBar = 0L;
2838}
2839
2840void KMdiMainFrm::closeViewButtonPressed()
2841{
2842 KMdiChildView * pView = activeWindow();
2843 if ( pView )
2844 {
2845 pView->close();
2846 }
2847}
2848
2849void KMdiMainFrm::setManagedDockPositionModeEnabled( bool enabled )
2850{
2851 m_managedDockPositionMode = enabled;
2852}
2853
2854void KMdiMainFrm::setActiveToolDock( KMdiDockContainer* td )
2855{
2856 if ( td == d->activeDockPriority[ 0 ] )
2857 return ;
2858 if ( d->activeDockPriority[ 0 ] == 0 )
2859 {
2860 d->activeDockPriority[ 0 ] = td;
2861 // d->focusList=new KMdiFocusList(this);
2862 // if (m_pMdi) d->focusList->addWidgetTree(m_pMdi);
2863 // if (m_documentTabWidget) d->focusList->addWidgetTree(m_documentTabWidget);
2864 return ;
2865 }
2866 for ( int dst = 3, src = 2;src >= 0;dst--, src-- )
2867 {
2868 if ( d->activeDockPriority[ src ] == td )
2869 src--;
2870 if ( src < 0 )
2871 break;
2872 d->activeDockPriority[ dst ] = d->activeDockPriority[ src ];
2873 }
2874 d->activeDockPriority[ 0 ] = td;
2875}
2876
2877void KMdiMainFrm::removeFromActiveDockList( KMdiDockContainer* td )
2878{
2879 for ( int i = 0;i < 4;i++ )
2880 {
2881 if ( d->activeDockPriority[ i ] == td )
2882 {
2883 for ( ;i < 3;i++ )
2884 d->activeDockPriority[ i ] = d->activeDockPriority[ i + 1 ];
2885 d->activeDockPriority[ 3 ] = 0;
2886 break;
2887 }
2888 }
2889 /*
2890 if (d->activeDockPriority[0]==0) {
2891 if (d->focusList) d->focusList->restore();
2892 delete d->focusList;
2893 d->focusList=0;
2894 }
2895 */
2896}
2897
2898void KMdiMainFrm::prevToolViewInDock()
2899{
2900 KMdiDockContainer * td = d->activeDockPriority[ 0 ];
2901 if ( !td )
2902 return ;
2903 td->prevToolView();
2904}
2905
2906void KMdiMainFrm::nextToolViewInDock()
2907{
2908 KMdiDockContainer * td = d->activeDockPriority[ 0 ];
2909 if ( !td )
2910 return ;
2911 td->nextToolView();
2912}
2913
2914KMdi::TabWidgetVisibility KMdiMainFrm::tabWidgetVisibility()
2915{
2916 if ( m_documentTabWidget )
2917 return m_documentTabWidget->tabWidgetVisibility();
2918
2919 return KMdi::NeverShowTabs;
2920}
2921
2922void KMdiMainFrm::setTabWidgetVisibility( KMdi::TabWidgetVisibility visibility )
2923{
2924 if ( m_documentTabWidget )
2925 m_documentTabWidget->setTabWidgetVisibility( visibility );
2926}
2927
2928KTabWidget * KMdiMainFrm::tabWidget() const
2929{
2930 return m_documentTabWidget;
2931}
2932
2933#include "tdemdimainfrm.moc"
KMDIPrivate::KMDIGUIClient
A class derived from KXMLGUIClient that handles the various KMDI modes.
Definition tdemdiguiclient.h:43
KMdiChildArea
Internal class.
Definition tdemdichildarea.h:53
KMdiChildArea::destroyChild
void destroyChild(KMdiChildFrm *child, bool focusTopChild=true)
Destroys a managed KMdiChildFrm Also deletes the client attached to this child.
Definition tdemdichildarea.cpp:109
KMdiChildArea::topChild
KMdiChildFrm * topChild() const
Returns the topmost child (the active one) or 0 if there are no children.
Definition tdemdichildarea.h:141
KMdiChildArea::manageChild
void manageChild(KMdiChildFrm *lpC, bool bShow=true, bool bCascade=true)
Appends a new KMdiChildFrm to this manager.
Definition tdemdichildarea.cpp:72
KMdiChildArea::focusTopChild
void focusTopChild()
Gives focus to the topmost child if it doesn't get focus automatically or you want to wait to give it...
Definition tdemdichildarea.cpp:355
KMdiChildArea::destroyChildButNotItsView
void destroyChildButNotItsView(KMdiChildFrm *lpC, bool bFocusTopChild=true)
Destroys a managed KMdiChildFrm Clients attached to the KMdiChildFrm are not deleted.
Definition tdemdichildarea.cpp:141
KMdiChildArea::getVisibleChildCount
int getVisibleChildCount() const
Returns the number of visible children.
Definition tdemdichildarea.cpp:482
KMdiChildArea::setTopChild
void setTopChild(KMdiChildFrm *child, bool setFocus=false)
Brings the child to the top of the stack The child is focused if setFocus is true.
Definition tdemdichildarea.cpp:171
KMdiChildArea::getCascadePoint
TQPoint getCascadePoint(int indexOfWindow=-1)
Calculates the cascade point for the given index.
Definition tdemdichildarea.cpp:258
KMdiChildFrmDragBeginEvent
a TQCustomEvent for begin of dragging This special event will be useful, to inform view about child f...
Definition tdemdichildfrm.h:84
KMdiChildFrmDragEndEvent
a TQCustomEvent for end of dragging This special event will be useful, to inform view about child fra...
Definition tdemdichildfrm.h:95
KMdiChildFrm
Internal class.
Definition tdemdichildfrm.h:131
KMdiChildFrm::state
MdiWindowState state() const
Returns the current state of the window.
Definition tdemdichildfrm.h:240
KMdiChildFrm::setClient
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...
Definition tdemdichildfrm.cpp:726
KMdiChildFrm::raiseAndActivate
void raiseAndActivate()
Internally called from the signal focusInEventOccurs.
Definition tdemdichildfrm.cpp:1209
KMdiChildFrm::setRestoreGeometry
void setRestoreGeometry(const TQRect &newRestGeo)
Sets the geometry that will be restored by calling restore().
Definition tdemdichildfrm.cpp:680
KMdiChildFrm::icon
TQPixmap * icon() const
Returns the child frame icon.
Definition tdemdichildfrm.cpp:720
KMdiChildFrm::systemMenu
TQPopupMenu * systemMenu() const
Returns the system menu.
Definition tdemdichildfrm.cpp:1228
KMdiChildFrm::caption
const TQString & caption()
Gets the caption of this mdi child.
Definition tdemdichildfrm.h:230
KMdiChildFrm::unsetClient
void unsetClient(TQPoint positionOffset=TQPoint(0, 0))
Reparents the client widget to 0 (desktop), moves with an offset from the original position Removes t...
Definition tdemdichildfrm.cpp:812
KMdiChildFrm::redecorateButtons
void redecorateButtons()
sets new raise behavior and pixmaps of the buttons depending on the current decoration style
Definition tdemdichildfrm.cpp:1322
KMdiChildFrm::captionHeight
int captionHeight() const
Returns the caption bar height.
Definition tdemdichildfrm.h:271
KMdiChildView
Base class for all your special view windows.
Definition tdemdichildview.h:109
KMdiChildView::isMinimized
bool isMinimized() const
Tells if the window is minimized when attached to the Mdi manager, or if it is VISIBLE when 'floating...
Definition tdemdichildview.cpp:308
KMdiChildView::youAreAttached
virtual void youAreAttached(KMdiChildFrm *lpC)
Internally called, if KMdiMainFrm::attach is called.
Definition tdemdichildview.cpp:350
KMdiChildView::youAreDetached
virtual void youAreDetached()
Internally called, if KMdiMainFrm::detach is called.
Definition tdemdichildview.cpp:358
KMdiChildView::mdiParent
KMdiChildFrm * mdiParent() const
Returns the KMdiChildFrm parent widget (or 0 if the window is not attached)
Definition tdemdichildview.h:604
KMdiChildView::maximize
virtual void maximize(bool bAnimate)
Maximizes this window when it is attached to the Mdi manager.
Definition tdemdichildview.cpp:248
KMdiChildView::isMaximized
bool isMaximized() const
Tells if the window is minimized when attached to the Mdi manager, otherwise returns false.
Definition tdemdichildview.cpp:318
KMdiChildView::restore
virtual void restore()
Restores this window to its normal size.
Definition tdemdichildview.cpp:328
KMdiChildView::minimize
virtual void minimize(bool bAnimate)
Minimizes this window when it is attached to the Mdi manager.
Definition tdemdichildview.cpp:221
KMdiChildView::activate
void activate()
This method does the same as focusInEvent().
Definition tdemdichildview.cpp:420
KMdiChildView::setCaption
virtual void setCaption(const TQString &szCaption)
Sets the window caption string... Calls updateButton on the taskbar button if it has been set.
Definition tdemdichildview.cpp:373
KMdiChildView::raise
virtual void raise()
Calls TQWidget::raise() or it's parent widget raise() if attached.
Definition tdemdichildview.cpp:766
KMdiChildView::getTimeStamp
const TQDateTime & getTimeStamp() const
Recall a previously remembered time, i.e.
Definition tdemdichildview.h:368
KMdiChildView::setRestoreGeometry
void setRestoreGeometry(const TQRect &newRestGeo)
Sets the geometry that will be restored by calling restore().
Definition tdemdichildview.cpp:286
KMdiChildView::isAttached
bool isAttached() const
Returns true if the MDI view is a child window within the MDI mainframe widget or false if the MDI vi...
Definition tdemdichildview.h:227
KMdiChildView::setWindowMenuID
void setWindowMenuID(int id)
Internally used for setting an ID for the 'Window' menu entry.
Definition tdemdichildview.cpp:691
KMdiChildView::tabCaption
const TQString & tabCaption() const
Returns the caption of the button on the taskbar.
Definition tdemdichildview.h:237
KMdiChildView::show
virtual void show()
Calls TQWidget::show but also for it's parent widget if attached.
Definition tdemdichildview.cpp:746
KMdiChildView::setTabCaption
virtual void setTabCaption(const TQString &caption)
Sets the caption of the button referring to this window.
Definition tdemdichildview.cpp:678
KMdiChildView::isToolView
bool isToolView() const
Returns if this is added as MDI tool-view.
Definition tdemdichildview.h:354
KMdiChildView::caption
const TQString & caption() const
Returns the caption of the child window (different from the caption on the button in the taskbar)
Definition tdemdichildview.h:232
KMdiChildView::restoreGeometry
TQRect restoreGeometry()
Returns the geometry that will be restored by calling restore().
Definition tdemdichildview.cpp:276
KMdiChildView::setMinimumSize
virtual void setMinimumSize(int minw, int minh)
Sets the minimum size of the widget to w by h pixels.
Definition tdemdichildview.cpp:715
KMdiChildView::updateTimeStamp
void updateTimeStamp()
Remember the current time.
Definition tdemdichildview.h:359
KMdiChildView::hide
virtual void hide()
Calls TQWidget::hide() or it's parent widget hide() if attached.
Definition tdemdichildview.cpp:756
KMdiChildView::setMaximumSize
virtual void setMaximumSize(int maxw, int maxh)
Sets the maximum size of the widget to w by h pixels.
Definition tdemdichildview.cpp:727
KMdiDocumentViewTabWidget
A reimplementation of KTabWidget for KMDI.
Definition tdemdidocumentviewtabwidget.h:24
KMdiDocumentViewTabWidget::removePage
virtual void removePage(TQWidget *w)
Removes the tab from the tabwidget.
Definition tdemdidocumentviewtabwidget.cpp:76
KMdiDocumentViewTabWidget::tabWidgetVisibility
KMdi::TabWidgetVisibility tabWidgetVisibility()
Set the tab widget's visibility and then make the change to match the new setting.
Definition tdemdidocumentviewtabwidget.cpp:137
KMdiDocumentViewTabWidget::addTab
virtual void addTab(TQWidget *child, const TQString &label)
Add a tab into the tabwidget.
Definition tdemdidocumentviewtabwidget.cpp:31
KMdiDocumentViewTabWidget::insertTab
virtual void insertTab(TQWidget *child, const TQString &label, int index=-1)
Insert a tab into the tabwidget with a label.
Definition tdemdidocumentviewtabwidget.cpp:52
KMdiDocumentViewTabWidget::setTabWidgetVisibility
void setTabWidgetVisibility(KMdi::TabWidgetVisibility)
Get the tab widget's visibility.
Definition tdemdidocumentviewtabwidget.cpp:125
KMdiMainFrm::setStandardMDIMenuEnabled
void setStandardMDIMenuEnabled(bool showModeMenu=true)
Control whether or not the standard MDI menu is displayed when a context menu is displayed.
Definition tdemdimainfrm.cpp:270
KMdiMainFrm::fakeSDIApplication
void fakeSDIApplication()
An SDI application user interface is faked:
Definition tdemdimainfrm.cpp:2832
KMdiMainFrm::tilePragma
virtual void tilePragma()
Tile Pragma.
Definition tdemdimainfrm.h:697
KMdiMainFrm::setTabWidgetVisibility
void setTabWidgetVisibility(KMdi::TabWidgetVisibility)
Set tabwidget visibility.
Definition tdemdimainfrm.cpp:2922
KMdiMainFrm::hideViewTaskBar
virtual void hideViewTaskBar()
Hides the view taskbar.
Definition tdemdimainfrm.cpp:2549
KMdiMainFrm::popupWindowMenu
void popupWindowMenu(TQPoint p)
Popups the "Window" menu.
Definition tdemdimainfrm.cpp:2778
KMdiMainFrm::setToolviewStyle
void setToolviewStyle(int flags)
Sets the appearance of the toolview tabs.
Definition tdemdimainfrm.cpp:1768
KMdiMainFrm::isFakingSDIApplication
bool isFakingSDIApplication() const
Definition tdemdimainfrm.h:478
KMdiMainFrm::windowMenuItemActivated
void windowMenuItemActivated(int id)
Usually called when the user clicks an MDI view item in the "Window" menu.
Definition tdemdimainfrm.cpp:2730
KMdiMainFrm::lastChildFrmClosed
void lastChildFrmClosed()
Signals the last attached KMdiChildView has been closed.
KMdiMainFrm::showViewTaskBar
virtual void showViewTaskBar()
Shows the view taskbar.
Definition tdemdimainfrm.cpp:2542
KMdiMainFrm::attachWindow
virtual void attachWindow(KMdiChildView *pWnd, bool bShow=true, bool bAutomaticResize=false)
Makes a main frame controlled undocked KMdiChildView docked.
Definition tdemdimainfrm.cpp:602
KMdiMainFrm::windowExists
bool windowExists(KMdiChildView *pWnd, ExistsAs as)
Returns whether this MDI child view is under MDI control (using addWindow() ) or not.
Definition tdemdimainfrm.cpp:957
KMdiMainFrm::iconifyAllViews
virtual void iconifyAllViews()
Iconfiy all views.
Definition tdemdimainfrm.cpp:1253
KMdiMainFrm::switchToIDEAlMode
virtual void switchToIDEAlMode()
Docks all view windows.
Definition tdemdimainfrm.cpp:1821
KMdiMainFrm::leftTopLevelMode
void leftTopLevelMode()
Signals that the Toplevel mode has been left.
KMdiMainFrm::taskBarPopup
virtual TQPopupMenu * taskBarPopup(KMdiChildView *pWnd, bool bIncludeWindowPopup=false)
Returns a popup menu filled according to the MDI view state.
Definition tdemdimainfrm.cpp:985
KMdiMainFrm::mdiModeHasBeenChangedTo
void mdiModeHasBeenChangedTo(KMdi::MdiMode)
Signals the MDI mode has been changed.
KMdiMainFrm::setEnableMaximizedChildFrmMode
virtual void setEnableMaximizedChildFrmMode(bool bEnable)
If in Childframe mode, we can switch between maximized or restored shown MDI views.
Definition tdemdimainfrm.cpp:2421
KMdiMainFrm::childViewIsDetachedNow
void childViewIsDetachedNow(TQWidget *)
Signals that a child view has been detached (undocked to desktop)
KMdiMainFrm::isViewTaskBarOn
bool isViewTaskBarOn()
Shows the view taskbar.
Definition tdemdimainfrm.cpp:2533
KMdiMainFrm::activeWindow
KMdiChildView * activeWindow()
Returns the focused attached MDI view.
Definition tdemdimainfrm.cpp:951
KMdiMainFrm::taskbarButtonRightClicked
virtual void taskbarButtonRightClicked(KMdiChildView *pWnd)
Activates the MDI view (see activateView() ) and popups the taskBar popup menu (see taskBarPopup() ).
Definition tdemdimainfrm.cpp:1105
KMdiMainFrm::expandVertical
virtual void expandVertical()
Maximizes only in vertical direction.
Definition tdemdimainfrm.h:687
KMdiMainFrm::closeWindow
virtual void closeWindow(KMdiChildView *pWnd, bool layoutTaskBar=true)
Removes a KMdiChildView from the MDI system and from the main frame`s control.
Definition tdemdimainfrm.cpp:827
KMdiMainFrm::createWrapper
KMdiChildView * createWrapper(TQWidget *view, const TQString &name, const TQString &shortName)
addWindow demands a KMdiChildView.
Definition tdemdimainfrm.cpp:415
KMdiMainFrm::activateLastWin
virtual void activateLastWin()
Activates the view last viewed concerning to the access time.
Definition tdemdimainfrm.cpp:2378
KMdiMainFrm::activatePrevWin
virtual void activatePrevWin()
Activates the previous open view.
Definition tdemdimainfrm.cpp:2321
KMdiMainFrm::activateFirstWin
virtual void activateFirstWin()
Activates the view first viewed concerning to the access time.
Definition tdemdimainfrm.cpp:2345
KMdiMainFrm::findWindow
KMdiChildView * findWindow(const TQString &caption)
Returns the KMdiChildView belonging to the given caption string.
Definition tdemdimainfrm.cpp:939
KMdiMainFrm::closeActiveView
virtual void closeActiveView()
Closes the view of the active (topchild) window.
Definition tdemdimainfrm.cpp:1264
KMdiMainFrm::childWindowCloseRequest
virtual void childWindowCloseRequest(KMdiChildView *pWnd)
Someone wants that the MDI view to be closed.
Definition tdemdimainfrm.cpp:1112
KMdiMainFrm::activateView
virtual void activateView(int index)
Activates the view with the tab page index (TabPage mode only)
Definition tdemdimainfrm.cpp:2407
KMdiMainFrm::createToolWindow
KMdiToolViewAccessor * createToolWindow()
Using this method you have to use the setWidget method of the access object, and it is very recommend...
Definition tdemdimainfrm.cpp:547
KMdiMainFrm::setUndockPositioningOffset
virtual void setUndockPositioningOffset(TQPoint offset)
Sets an offset value that is used on detachWindow() .
Definition tdemdimainfrm.h:388
KMdiMainFrm::expandHorizontal
virtual void expandHorizontal()
Maximizes only in horizontal direction.
Definition tdemdimainfrm.h:692
KMdiMainFrm::mdiMode
KMdi::MdiMode mdiMode()
Returns the MDI mode.
Definition tdemdimainfrm.h:322
KMdiMainFrm::cascadeMaximized
virtual void cascadeMaximized()
Cascades the windows resizing them to the maximum available size.
Definition tdemdimainfrm.h:682
KMdiMainFrm::collapseOverlapContainers
void collapseOverlapContainers()
Signals we need to collapse the overlapped containers.
KMdiMainFrm::switchToToplevelMode
virtual void switchToToplevelMode()
Undocks all view windows (unix-like)
Definition tdemdimainfrm.cpp:1342
KMdiMainFrm::tileVertically
virtual void tileVertically()
Tile Vertically.
Definition tdemdimainfrm.h:707
KMdiMainFrm::removeWindowFromMdi
virtual void removeWindowFromMdi(KMdiChildView *pWnd)
Removes a KMdiChildView from the MDI system and from the main frame`s control.
Definition tdemdimainfrm.cpp:727
KMdiMainFrm::createIterator
KMdiIterator< KMdiChildView * > * createIterator()
If you don't want to know about the inner structure of the KMdi system, you can use this iterator to ...
Definition tdemdimainfrm.h:397
KMdiMainFrm::applyOptions
virtual void applyOptions()
Called in the constructor (forces a resize of all MDI views)
Definition tdemdimainfrm.cpp:335
KMdiMainFrm::setMenuForSDIModeSysButtons
virtual void setMenuForSDIModeSysButtons(KMenuBar *menuBar=0)
Tells the MDI system a QMenu where it can insert buttons for the system menu, undock,...
Definition tdemdimainfrm.cpp:2187
KMdiMainFrm::windowPopup
virtual TQPopupMenu * windowPopup(KMdiChildView *pWnd, bool bIncludeTaskbarPopup=true)
Returns a popup menu with only a title "Window".
Definition tdemdimainfrm.cpp:973
KMdiMainFrm::slot_toggleTaskBar
virtual void slot_toggleTaskBar()
Switches the KMdiTaskBar on and off.
Definition tdemdimainfrm.cpp:384
KMdiMainFrm::tileAnodine
virtual void tileAnodine()
Tile Anodine.
Definition tdemdimainfrm.h:702
KMdiMainFrm::dragEndTimeOut
void dragEndTimeOut()
The timer for main widget moving has elapsed -> send drag end to all concerned views.
Definition tdemdimainfrm.cpp:2787
KMdiMainFrm::cascadeWindows
virtual void cascadeWindows()
Cascades the windows without resizing them.
Definition tdemdimainfrm.h:677
KMdiMainFrm::addToolWindow
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.
Definition tdemdimainfrm.cpp:565
KMdiMainFrm::frameDecorOfAttachedViews
static int frameDecorOfAttachedViews()
Definition tdemdimainfrm.h:465
KMdiMainFrm::addWindow
virtual void addWindow(KMdiChildView *pWnd, int flags=KMdi::StandardAdd)
Adds a KMdiChildView to the MDI system.
Definition tdemdimainfrm.cpp:438
KMdiMainFrm::event
virtual bool event(TQEvent *e)
Catches certain Qt events and processes it here.
Definition tdemdimainfrm.cpp:1118
KMdiMainFrm::dockMenuItemActivated
void dockMenuItemActivated(int id)
Usually called when the user clicks an MDI view item in the sub-popup menu "Docking" of the "Window" ...
Definition tdemdimainfrm.cpp:2756
KMdiMainFrm::updateSysButtonConnections
void updateSysButtonConnections(KMdiChildFrm *oldChild, KMdiChildFrm *newChild)
Reconnects the system buttons form maximize mode (SDI mode) with the new child frame.
Definition tdemdimainfrm.cpp:2498
KMdiMainFrm::switchToChildframeMode
virtual void switchToChildframeMode()
Docks all view windows (Windows-like)
Definition tdemdimainfrm.cpp:1454
KMdiMainFrm::detachWindow
virtual void detachWindow(KMdiChildView *pWnd, bool bShow=true)
Makes a docked KMdiChildView undocked.
Definition tdemdimainfrm.cpp:661
KMdiMainFrm::closeAllViews
virtual void closeAllViews()
Close all views.
Definition tdemdimainfrm.cpp:1234
KMdiMainFrm::defaultChildFrmSize
TQSize defaultChildFrmSize()
Returns the default size for a newly added KMdiChildView.
Definition tdemdimainfrm.h:443
KMdiMainFrm::switchToTabPageMode
virtual void switchToTabPageMode()
Docks all view windows (Windows-like)
Definition tdemdimainfrm.cpp:1600
KMdiMainFrm::setSwitching
void setSwitching(const bool switching)
We're switching something.
Definition tdemdimainfrm.h:484
KMdiMainFrm::createTaskBar
virtual void createTaskBar()
Creates a new MDI taskbar (showing the MDI views as taskbar entries) and shows it.
Definition tdemdimainfrm.cpp:378
KMdiMainFrm::createMdiManager
virtual void createMdiManager()
Creates the MDI view area and connects some signals and slots with the KMdiMainFrm widget.
Definition tdemdimainfrm.cpp:360
KMdiMainFrm::eventFilter
virtual bool eventFilter(TQObject *obj, TQEvent *e)
Definition tdemdimainfrm.cpp:1164
KMdiMainFrm::switchOffMaximizeModeForMenu
void switchOffMaximizeModeForMenu(KMdiChildFrm *oldChild)
Turns the system buttons for maximize mode (SDI mode) off, and disconnects them.
Definition tdemdimainfrm.cpp:2475
KMdiMainFrm::tabWidgetVisibility
KMdi::TabWidgetVisibility tabWidgetVisibility()
Get tabwidget visibility.
Definition tdemdimainfrm.cpp:2914
KMdiMainFrm::setFrameDecorOfAttachedViews
virtual void setFrameDecorOfAttachedViews(int frameDecor)
Sets the decoration of the window frame of docked (attached) MDI views.
Definition tdemdimainfrm.cpp:2800
KMdiMainFrm::lastChildViewClosed
void lastChildViewClosed()
Signals the last KMdiChildView (that is under MDI control) has been closed.
KMdiMainFrm::findRootDockWidgets
void findRootDockWidgets(TQPtrList< KDockWidget > *pRootDockWidgetList, TQValueList< TQRect > *pPositionList)
find the root dockwidgets and store their geometry
Definition tdemdimainfrm.cpp:1272
KMdiMainFrm::setIDEAlModeStyle
void setIDEAlModeStyle(int flags) TDE_DEPRECATED
Sets the appearance of the IDEAl mode.
Definition tdemdimainfrm.cpp:1736
KMdiMainFrm::activateNextWin
virtual void activateNextWin()
Activates the next open view.
Definition tdemdimainfrm.cpp:2297
KMdiMainFrm::fillWindowMenu
virtual void fillWindowMenu()
Update of the window menu contents.
Definition tdemdimainfrm.cpp:2556
KMdiMainFrm::setSysButtonsAtMenuPosition
virtual void setSysButtonsAtMenuPosition()
If there's a main menubar given, it will create the 4 maximize mode buttons there (undock,...
Definition tdemdimainfrm.cpp:2260
KMdiMainFrm::setMinimumSize
virtual void setMinimumSize(int minw, int minh)
Do nothing when in Toplevel mode.
Definition tdemdimainfrm.cpp:406
KMdiMainFrm::tabWidget
class KTabWidget * tabWidget() const
Returns the tabwidget used in IDEAl and Tabbed modes.
Definition tdemdimainfrm.cpp:2928
KMdiMainFrm::closeViewButtonPressed
void closeViewButtonPressed()
internally used to handle click on view close button (TabPage mode, only)
Definition tdemdimainfrm.cpp:2840
KMdiTaskBarButton
Internal class.
Definition tdemditaskbar.h:52
KMdiTaskBar
Internal class.
Definition tdemditaskbar.h:130
KMdiTaskBar::getButton
KMdiTaskBarButton * getButton(KMdiChildView *win_ptr)
Get the button belonging to the MDI view given as parameter.
Definition tdemditaskbar.cpp:242
KMdiTaskBar::addWinButton
KMdiTaskBarButton * addWinButton(KMdiChildView *win_ptr)
Add a new KMdiTaskBarButton .
Definition tdemditaskbar.cpp:168
KMdiTaskBar::setActiveButton
void setActiveButton(KMdiChildView *win_ptr)
Pushes the desired taskbar button down (switch on), the old one is released (switched off).
Definition tdemditaskbar.cpp:289
KMdiTaskBar::isSwitchedOn
bool isSwitchedOn() const
Definition tdemditaskbar.h:168
KMdiTaskBar::switchOn
void switchOn(bool bOn)
Switch it on or off.
Definition tdemditaskbar.cpp:222
KMdiTaskBar::removeWinButton
void removeWinButton(KMdiChildView *win_ptr, bool haveToLayoutTaskBar=true)
Removes a KMdiTaskBarButton and deletes it.
Definition tdemditaskbar.cpp:202
KMdiViewCloseEvent
Internal class.
Definition tdemdimainfrm.h:73
KMdi
A namespace for the KMDI library.
Definition tdemdidefines.h:42
KMdi::TextAndIcon
@ TextAndIcon
Show both the icon and description on the toolview tabs.
Definition tdemdidefines.h:113
KMdi::IconOnly
@ IconOnly
Show only icons on the toolview tabs.
Definition tdemdidefines.h:109
KMdi::TextOnly
@ TextOnly
Show only the text description on the toolview tabs.
Definition tdemdidefines.h:111

tdemdi

Skip menu "tdemdi"
  • Main Page
  • Namespace List
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

tdemdi

Skip menu "tdemdi"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdemdi by doxygen 1.9.8
This website is maintained by Timothy Pearson.