summaryrefslogtreecommitdiffstats
path: root/kmdi/kmdimainfrm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kmdi/kmdimainfrm.cpp')
-rw-r--r--kmdi/kmdimainfrm.cpp2937
1 files changed, 0 insertions, 2937 deletions
diff --git a/kmdi/kmdimainfrm.cpp b/kmdi/kmdimainfrm.cpp
deleted file mode 100644
index f101ff700..000000000
--- a/kmdi/kmdimainfrm.cpp
+++ /dev/null
@@ -1,2937 +0,0 @@
-//----------------------------------------------------------------------------
-// filename : kmdimainfrm.cpp
-//----------------------------------------------------------------------------
-// Project : KDE MDI extension
-//
-// begin : 07/1999 by Szymon Stefanek as part of kvirc
-// (an IRC application)
-// changes : 09/1999 by Falk Brettschneider to create an
-// - 06/2000 stand-alone Qt extension set of
-// classes and a Qt-based library
-// 2000-2003 maintained by the KDevelop project
-// patches : 02/2000 by Massimo Morin (mmorin@schedsys.com)
-// */2000 by Lars Beikirch (Lars.Beikirch@gmx.net)
-// 01/2003 by Jens Zurheide (jens.zurheide@gmx.de)
-//
-// copyright : (C) 1999-2003 by Szymon Stefanek (stefanek@tin.it)
-// and
-// Falk Brettschneider
-// email : falkbr@tdevelop.org (Falk Brettschneider)
-//----------------------------------------------------------------------------
-//
-//----------------------------------------------------------------------------
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU Library General Public License as
-// published by the Free Software Foundation; either version 2 of the
-// License, or (at your option) any later version.
-//
-//----------------------------------------------------------------------------
-
-
-/*
- * ATTENTION: please do you part to try to make this file legible. It's
- * extremely hard to read already. Especially follow the indenting rules.
- */
-#include "config.h"
-
-#include <assert.h>
-
-#include <tqcursor.h>
-#include <tqclipboard.h>
-#include <tqobjectlist.h>
-#include <tqpopupmenu.h>
-#include <tqmenubar.h>
-
-#include <kmenubar.h>
-#include <kapplication.h>
-#include <kdebug.h>
-#include <tdeversion.h>
-#include <tqtabwidget.h>
-#include <klocale.h>
-#include <kstdaccel.h>
-
-#include <kiconloader.h>
-#include <kmdidockcontainer.h>
-
-
-#include <tqtoolbutton.h>
-#include <tqdockarea.h>
-#include <tqlayout.h>
-#include <tqtimer.h>
-#include <tqtextstream.h>
-#include <tqstring.h>
-#include <tqmap.h>
-#include <tqvaluelist.h>
-
-#include "kmdimainfrm.h"
-#include "kmditaskbar.h"
-#include "kmdichildfrm.h"
-#include "kmdichildarea.h"
-#include "kmdichildview.h"
-#include "kmdidockcontainer.h"
-#include "kmditoolviewaccessor_p.h"
-#include "kmdifocuslist.h"
-#include "kmdidocumentviewtabwidget.h"
-#include "kmdiguiclient.h"
-
-#include "win_undockbutton.xpm"
-#include "win_minbutton.xpm"
-#include "win_restorebutton.xpm"
-#include "win_closebutton.xpm"
-#include "kde_undockbutton.xpm"
-#include "kde_minbutton.xpm"
-#include "kde_restorebutton.xpm"
-#include "kde_closebutton.xpm"
-#include "kde2_undockbutton.xpm"
-#include "kde2_minbutton.xpm"
-#include "kde2_restorebutton.xpm"
-#include "kde2_closebutton.xpm"
-#include "kde2laptop_undockbutton.xpm"
-#include "kde2laptop_minbutton.xpm"
-#include "kde2laptop_restorebutton.xpm"
-#include "kde2laptop_closebutton.xpm"
-#include "kde2laptop_closebutton_menu.xpm"
-
-#ifdef Q_WS_X11
-#ifndef NO_KDE
-#include <X11/X.h> // schroder
-#include <X11/Xlib.h> // schroder
-#endif
-
-#ifdef KeyRelease
-/* I hate the defines in the X11 header files. Get rid of one of them */
-#undef KeyRelease
-#endif
-
-#ifdef KeyPress
-/* I hate the defines in the X11 header files. Get rid of one of them */
-#undef KeyPress
-#endif
-#endif // Q_WS_X11 && ! K_WS_QTONLY
-
-using namespace KParts;
-
-KMdi::FrameDecor KMdiMainFrm::m_frameDecoration = KMdi::KDELook;
-
-class KMdiMainFrmPrivate
-{
-public:
- KMdiMainFrmPrivate() : focusList( 0 )
- {
- for ( int i = 0;i < 4;i++ )
- {
- activeDockPriority[ i ] = 0;
- m_styleIDEAlMode = 0;
- m_toolviewStyle = 0;
- }
- }
- ~KMdiMainFrmPrivate()
- {}
- KMdiDockContainer* activeDockPriority[ 4 ];
- KMdiFocusList *focusList;
- int m_styleIDEAlMode;
- int m_toolviewStyle;
- KAction *closeWindowAction;
-};
-
-//============ constructor ============//
-KMdiMainFrm::KMdiMainFrm( TQWidget* parentWidget, const char* name, KMdi::MdiMode mdiMode, WFlags flags )
- : KParts::DockMainWindow( parentWidget, name, flags )
- , m_mdiMode( KMdi::UndefinedMode )
- , m_pMdi( 0L )
- , m_pTaskBar( 0L )
- , m_pDocumentViews( 0L )
- , m_pCurrentWindow( 0L )
- , m_pWindowPopup( 0L )
- , m_pTaskBarPopup( 0L )
- , m_pWindowMenu( 0L )
- , m_pDockMenu( 0L )
- , m_pMdiModeMenu( 0L )
- , m_pPlacingMenu( 0L )
- , m_pMainMenuBar( 0L )
- , m_pUndockButtonPixmap( 0L )
- , m_pMinButtonPixmap( 0L )
- , m_pRestoreButtonPixmap( 0L )
- , m_pCloseButtonPixmap( 0L )
- , m_pUndock( 0L )
- , m_pMinimize( 0L )
- , m_pRestore( 0L )
- , m_pClose( 0L )
- , m_bMaximizedChildFrmMode( false )
- , m_oldMainFrmHeight( 0 )
- , m_oldMainFrmMinHeight( 0 )
- , m_oldMainFrmMaxHeight( 0 )
- , m_bSDIApplication( false )
- , m_pDockbaseAreaOfDocumentViews( 0L )
- , m_pTempDockSession( 0L )
- , m_bClearingOfWindowMenuBlocked( false )
- , m_pDragEndTimer( 0L )
- , m_bSwitching( false )
- , m_leftContainer( 0 )
- , m_rightContainer( 0 )
- , m_topContainer( 0 )
- , m_bottomContainer( 0 )
- , d( new KMdiMainFrmPrivate() )
- , m_mdiGUIClient( 0 )
- , m_managedDockPositionMode( false )
- , m_documentTabWidget( 0 )
-{
- kdDebug(760) << k_funcinfo << endl;
- // Create the local lists of windows
- m_pDocumentViews = new TQPtrList<KMdiChildView>;
- m_pDocumentViews->setAutoDelete( false );
- m_pToolViews = new TQMap<TQWidget*, KMdiToolViewAccessor*>;
-
- // This seems to be needed (re-check it after Qt2.0 comed out)
- setFocusPolicy( TQ_ClickFocus );
-
- // create the central widget
- createMdiManager();
-
- // cover KMdi's childarea by a dockwidget
- m_pDockbaseAreaOfDocumentViews = createDockWidget( "mdiAreaCover", TQPixmap(), 0L, "mdi_area_cover" );
- m_pDockbaseAreaOfDocumentViews->setDockWindowTransient( this, true );
- m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockNone );
- m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockCorner );
- m_pDockbaseAreaOfDocumentViews->setWidget( m_pMdi );
- // set this dock to main view
- setView( m_pDockbaseAreaOfDocumentViews );
- setMainDockWidget( m_pDockbaseAreaOfDocumentViews );
-
- // Apply options for the MDI manager
- applyOptions();
-
- m_pTaskBarPopup = new TQPopupMenu( this, "taskbar_popup_menu" );
- m_pWindowPopup = new TQPopupMenu( this, "window_popup_menu" );
-
- m_pWindowMenu = new TQPopupMenu( this, "window_menu" );
- m_pWindowMenu->setCheckable( true );
- TQObject::connect( m_pWindowMenu, TQT_SIGNAL( aboutToShow() ), this, TQT_SLOT( fillWindowMenu() ) );
-
- m_pDockMenu = new TQPopupMenu( this, "dock_menu" );
- m_pDockMenu->setCheckable( true );
-
- m_pMdiModeMenu = new TQPopupMenu( this, "mdimode_menu" );
- m_pMdiModeMenu->setCheckable( true );
-
- m_pPlacingMenu = new TQPopupMenu( this, "placing_menu" );
-
- d->closeWindowAction = new KAction(i18n("&Close"), KStdAccel::close(),
- TQT_TQOBJECT(this), TQT_SLOT(closeActiveView()), actionCollection(), "window_close");
-
- // the MDI view taskbar
- createTaskBar();
-
- // this is only a hack, but prevents us from crash because the buttons are otherwise
- // not created before we switch the modes where we need them !!!
- setMenuForSDIModeSysButtons( menuBar() );
-
- switch ( mdiMode )
- {
- case KMdi::IDEAlMode:
- kdDebug(760) << k_funcinfo << "Switching to IDEAl mode" << endl;
- switchToIDEAlMode();
- break;
- case KMdi::TabPageMode:
- kdDebug(760) << k_funcinfo << "Switching to tab page mode" << endl;
- switchToTabPageMode();
- break;
- case KMdi::ToplevelMode:
- kdDebug(760) << k_funcinfo << "Switching to top level mode" << endl;
- switchToToplevelMode();
- break;
- default:
- m_mdiMode = KMdi::ChildframeMode;
- kdDebug(760) << k_funcinfo << "Switching to child frame mode" << endl;
- break;
- }
-
- // drag end timer
- m_pDragEndTimer = new TQTimer();
- connect( m_pDragEndTimer, TQT_SIGNAL( timeout() ), this, TQT_SLOT( dragEndTimeOut() ) );
- connect( guiFactory(), TQT_SIGNAL( clientAdded( KXMLGUIClient* ) ),
- this, TQT_SLOT( verifyToplevelHeight() ) );
- connect( guiFactory(), TQT_SIGNAL( clientRemoved( KXMLGUIClient* ) ),
- this, TQT_SLOT( verifyToplevelHeight() ) );
-}
-
-void KMdiMainFrm::verifyToplevelHeight()
-{
- if ( m_mdiMode != KMdi::ToplevelMode )
- return;
-
- //kdDebug(760) << k_funcinfo << endl;
- int topDockHeight = topDock() ? topDock()->height() : 0;
- int menuBarHeight = hasMenuBar() ? menuBar()->height() : 0;
- setFixedHeight( topDockHeight + menuBarHeight );
- resize( width(), height() );
-}
-
-void KMdiMainFrm::setStandardMDIMenuEnabled( bool showModeMenu )
-{
- m_mdiGUIClient = new KMDIPrivate::KMDIGUIClient( this, showModeMenu );
- connect( m_mdiGUIClient, TQT_SIGNAL( toggleTop() ), this, TQT_SIGNAL( toggleTop() ) );
- connect( m_mdiGUIClient, TQT_SIGNAL( toggleLeft() ), this, TQT_SIGNAL( toggleLeft() ) );
- connect( m_mdiGUIClient, TQT_SIGNAL( toggleRight() ), this, TQT_SIGNAL( toggleRight() ) );
- connect( m_mdiGUIClient, TQT_SIGNAL( toggleBottom() ), this, TQT_SIGNAL( toggleBottom() ) );
-
- if ( m_mdiMode == KMdi::IDEAlMode )
- {
- if ( m_topContainer )
- connect( this, TQT_SIGNAL( toggleTop() ), m_topContainer->getWidget(), TQT_SLOT( toggle() ) );
- if ( m_leftContainer )
- connect( this, TQT_SIGNAL( toggleLeft() ), m_leftContainer->getWidget(), TQT_SLOT( toggle() ) );
- if ( m_rightContainer )
- connect( this, TQT_SIGNAL( toggleRight() ), m_rightContainer->getWidget(), TQT_SLOT( toggle() ) );
- if ( m_bottomContainer )
- connect( this, TQT_SIGNAL( toggleBottom() ), m_bottomContainer->getWidget(), TQT_SLOT( toggle() ) );
- }
-
- emit mdiModeHasBeenChangedTo( m_mdiMode );
-}
-
-//============ ~KMdiMainFrm ============//
-KMdiMainFrm::~KMdiMainFrm()
-{
- //save the children first to a list, as removing invalidates our iterator
- TQValueList<KMdiChildView*> children;
- for ( KMdiChildView * w = m_pDocumentViews->first();w;w = m_pDocumentViews->next() )
- children.append( w );
-
- // safely close the windows so properties are saved...
- TQValueListIterator<KMdiChildView*> childIt;
- for ( childIt = children.begin(); childIt != children.end(); ++childIt )
- {
- closeWindow( *childIt, false ); // without re-layout taskbar!
- }
-
- emit lastChildViewClosed();
- delete m_pDocumentViews;
- delete m_pToolViews;
- m_pToolViews = 0;
- delete m_pDragEndTimer;
-
- delete m_pUndockButtonPixmap;
- delete m_pMinButtonPixmap;
- delete m_pRestoreButtonPixmap;
- delete m_pCloseButtonPixmap;
-
- //deletes added for Release-Version-Pop-Up-WinMenu-And-Go-Out-Problem
- delete m_pDockMenu;
- delete m_pMdiModeMenu;
- delete m_pPlacingMenu;
- delete m_pTaskBarPopup;
- delete m_pWindowPopup;
- delete m_pWindowMenu;
- delete m_mdiGUIClient;
- delete m_pTempDockSession;
- m_mdiGUIClient = 0;
- delete d;
- d = 0;
-}
-
-//============ applyOptions ============//
-//FIXME something wrong with this function. dunno what though
-void KMdiMainFrm::applyOptions()
-{
- TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
- for ( ; ( *it ); ++it )
- {
- TQWidget* childFrame = 0L;
- if ( ( *it )->mdiParent() )
- {
- kdDebug(760) << k_funcinfo << "using child view's mdi parent for resize hack" << endl;
- childFrame = ( *it )->mdiParent();
- }
- else
- {
- kdDebug(760) << k_funcinfo << "using child view for resize hack" << endl;
- childFrame = ( *it );
- }
-
- int w = childFrame->width();
- int h = childFrame->height();
- childFrame->resize( w + 1, h + 1 );
- childFrame->resize( w - 1, h - 1 );
- }
-}
-
-//============ createMdiManager ============//
-void KMdiMainFrm::createMdiManager()
-{
- kdDebug(760) << k_funcinfo << "creating MDI manager" << endl;
- m_pMdi = new KMdiChildArea( this );
- setCentralWidget( m_pMdi );
- TQObject::connect( m_pMdi, TQT_SIGNAL( nowMaximized( bool ) ),
- this, TQT_SLOT( setEnableMaximizedChildFrmMode( bool ) ) );
- TQObject::connect( m_pMdi, TQT_SIGNAL( noMaximizedChildFrmLeft( KMdiChildFrm* ) ),
- this, TQT_SLOT( switchOffMaximizeModeForMenu( KMdiChildFrm* ) ) );
- TQObject::connect( m_pMdi, TQT_SIGNAL( sysButtonConnectionsMustChange( KMdiChildFrm*, KMdiChildFrm* ) ),
- this, TQT_SLOT( updateSysButtonConnections( KMdiChildFrm*, KMdiChildFrm* ) ) );
- TQObject::connect( m_pMdi, TQT_SIGNAL( popupWindowMenu( TQPoint ) ),
- this, TQT_SLOT( popupWindowMenu( TQPoint ) ) );
- TQObject::connect( m_pMdi, TQT_SIGNAL( lastChildFrmClosed() ),
- this, TQT_SIGNAL( lastChildFrmClosed() ) );
-}
-
-//============ createTaskBar ==============//
-void KMdiMainFrm::createTaskBar()
-{
- m_pTaskBar = new KMdiTaskBar( this, TQMainWindow::DockBottom );
- m_pTaskBar->installEventFilter( this );
-}
-
-void KMdiMainFrm::slot_toggleTaskBar()
-{
- if ( !m_pTaskBar )
- return;
- m_pTaskBar->switchOn( !m_pTaskBar->isSwitchedOn() );
-}
-
-void KMdiMainFrm::resizeEvent( TQResizeEvent *e )
-{
- if ( ( m_mdiMode == KMdi::ToplevelMode ) && !parentWidget() )
- {
- if ( e->oldSize().height() != e->size().height() )
- return ;
- }
- KParts::DockMainWindow::resizeEvent( e );
- if ( !m_mdiGUIClient )
- return ;
- setSysButtonsAtMenuPosition();
-}
-
-//================ setMinimumSize ===============//
-
-void KMdiMainFrm::setMinimumSize( int minw, int minh )
-{
- if ( ( m_mdiMode == KMdi::ToplevelMode ) && !parentWidget() )
- return ;
- DockMainWindow::setMinimumSize( minw, minh );
-}
-
-//================ wrapper ===============//
-
-KMdiChildView* KMdiMainFrm::createWrapper( TQWidget *view, const TQString& name, const TQString& shortName )
-{
- Q_ASSERT( view ); // if this assert fails, then some part didn't return a widget. Fix the part ;)
-
- KMdiChildView* pMDICover = new KMdiChildView( name /*caption*/, 0L /*parent*/,
- name.latin1() );
- TQBoxLayout* pLayout = new TQHBoxLayout( pMDICover, 0, -1, "layout" );
- view->reparent( pMDICover, TQPoint( 0, 0 ) );
- pLayout->addWidget( view );
- // pMDICover->setName(name);
- pMDICover->setTabCaption( shortName );
- pMDICover->setCaption( name );
-
- const TQPixmap* wndIcon = view->icon();
- if ( wndIcon )
- pMDICover->setIcon( *wndIcon );
-
- pMDICover->trackIconAndCaptionChanges( view );
- return pMDICover;
-}
-
-//================ addWindow ===============//
-
-void KMdiMainFrm::addWindow( KMdiChildView* pWnd, int flags )
-{
- addWindow( pWnd, flags, -1 );
-}
-
-void KMdiMainFrm::addWindow( KMdiChildView* pWnd, int flags, int index )
-{
- if ( windowExists( pWnd, AnyView ) ) //already added
- return;
-
- if ( flags & KMdi::ToolWindow )
- {
- addToolWindow( pWnd );
- // some kind of cascading
- pWnd->move( m_pMdi->mapToGlobal( m_pMdi->getCascadePoint() ) );
-
- return ;
- }
-
- d->closeWindowAction->setEnabled(true);
-
- // common connections used when under MDI control
- TQObject::connect( pWnd, TQT_SIGNAL( clickedInWindowMenu( int ) ), this, TQT_SLOT( windowMenuItemActivated( int ) ) );
- TQObject::connect( pWnd, TQT_SIGNAL( focusInEventOccurs( KMdiChildView* ) ), this, TQT_SLOT( activateView( KMdiChildView* ) ) );
- TQObject::connect( pWnd, TQT_SIGNAL( childWindowCloseRequest( KMdiChildView* ) ), this, TQT_SLOT( childWindowCloseRequest( KMdiChildView* ) ) );
- TQObject::connect( pWnd, TQT_SIGNAL( attachWindow( KMdiChildView*, bool ) ), this, TQT_SLOT( attachWindow( KMdiChildView*, bool ) ) );
- TQObject::connect( pWnd, TQT_SIGNAL( detachWindow( KMdiChildView*, bool ) ), this, TQT_SLOT( detachWindow( KMdiChildView*, bool ) ) );
- TQObject::connect( pWnd, TQT_SIGNAL( clickedInDockMenu( int ) ), this, TQT_SLOT( dockMenuItemActivated( int ) ) );
- TQObject::connect( pWnd, TQT_SIGNAL( activated( KMdiChildView* ) ), this, TQT_SIGNAL( viewActivated( KMdiChildView* ) ) );
- TQObject::connect( pWnd, TQT_SIGNAL( deactivated( KMdiChildView* ) ), this, TQT_SIGNAL( viewDeactivated( KMdiChildView* ) ) );
-
- if ( index == -1 )
- m_pDocumentViews->append( pWnd );
- else
- m_pDocumentViews->insert( index, pWnd );
-
- if ( m_pTaskBar )
- {
- KMdiTaskBarButton* but = m_pTaskBar->addWinButton( pWnd );
- TQObject::connect( pWnd, TQT_SIGNAL( tabCaptionChanged( const TQString& ) ), but, TQT_SLOT( setNewText( const TQString& ) ) );
- }
-
- // embed the view depending on the current MDI mode
- if ( m_mdiMode == KMdi::TabPageMode || m_mdiMode == KMdi::IDEAlMode )
- {
- TQPixmap pixmap;
- if ( pWnd->icon() )
- pixmap = *( pWnd->icon() );
-
- m_documentTabWidget->insertTab( pWnd, pixmap, pWnd->tabCaption(), index );
-
- connect( pWnd, TQT_SIGNAL( iconUpdated( TQWidget*, TQPixmap ) ), m_documentTabWidget, TQT_SLOT( updateIconInView( TQWidget*, TQPixmap ) ) );
- connect( pWnd, TQT_SIGNAL( captionUpdated( TQWidget*, const TQString& ) ), m_documentTabWidget, TQT_SLOT( updateCaptionInView( TQWidget*, const TQString& ) ) );
- }
- else
- {
- if ( ( flags & KMdi::Detach ) || ( m_mdiMode == KMdi::ToplevelMode ) )
- {
- detachWindow( pWnd, !( flags & KMdi::Hide ) );
- emit childViewIsDetachedNow( pWnd ); // fake it because detach won't call it in this case of addWindow-to-MDI
- }
- else
- attachWindow( pWnd, !( flags & KMdi::Hide ), flags & KMdi::UseKMdiSizeHint );
-
- if ( ( m_bMaximizedChildFrmMode && ( !m_bSDIApplication && ( flags & KMdi::Detach ) )
- && m_mdiMode != KMdi::ToplevelMode ) || ( flags & KMdi::Maximize ) )
- {
- if ( !pWnd->isMaximized() )
- pWnd->maximize();
- }
-
- if ( !m_bSDIApplication || ( flags & KMdi::Detach ) )
- {
- if ( flags & KMdi::Minimize )
- pWnd->minimize();
-
- if ( !( flags & KMdi::Hide ) )
- {
- if ( pWnd->isAttached() )
- pWnd->mdiParent()->show();
- else
- pWnd->show();
- }
- }
- }
-}
-
-//============ addWindow ============//
-void KMdiMainFrm::addWindow( KMdiChildView* pWnd, TQRect rectNormal, int flags )
-{
- addWindow( pWnd, flags );
- if ( m_bMaximizedChildFrmMode && pWnd->isAttached() )
- pWnd->setRestoreGeometry( rectNormal );
- else
- pWnd->setGeometry( rectNormal );
-}
-
-//============ addWindow ============//
-void KMdiMainFrm::addWindow( KMdiChildView* pWnd, TQPoint pos, int flags )
-{
- addWindow( pWnd, flags );
- if ( m_bMaximizedChildFrmMode && pWnd->isAttached() )
- pWnd->setRestoreGeometry( TQRect( pos, pWnd->restoreGeometry().size() ) );
- else
- pWnd->move( pos );
-}
-
-
-
-KMdiToolViewAccessor *KMdiMainFrm::createToolWindow()
-{
- return new KMdiToolViewAccessor( this );
-}
-
-
-void KMdiMainFrm::deleteToolWindow( TQWidget* pWnd )
-{
- if ( m_pToolViews->contains( pWnd ) )
- deleteToolWindow( ( *m_pToolViews ) [ pWnd ] );
-}
-
-void KMdiMainFrm::deleteToolWindow( KMdiToolViewAccessor *accessor )
-{
- delete accessor;
-}
-
-//============ addWindow ============//
-KMdiToolViewAccessor *KMdiMainFrm::addToolWindow( TQWidget* pWnd, KDockWidget::DockPosition pos, TQWidget* pTargetWnd,
- int percent, const TQString& tabToolTip, const TQString& tabCaption )
-{
- TQWidget* tvta = pWnd;
- KDockWidget* pDW = dockManager->getDockWidgetFromName( pWnd->name() );
- if ( pDW )
- {
- // probably readDockConfig already created the widgetContainer, use that
- pDW->setWidget( pWnd );
-
- if ( pWnd->icon() )
- pDW->setPixmap( *pWnd->icon() );
-
- pDW->setTabPageLabel( ( tabCaption == 0 ) ? pWnd->caption() : tabCaption );
- pDW->setToolTipString( tabToolTip );
- dockManager->removeFromAutoCreateList( pDW );
- pWnd = pDW;
- }
-
- TQRect r = pWnd->geometry();
-
- KMdiToolViewAccessor *mtva = new KMdiToolViewAccessor( this, pWnd, tabToolTip, ( tabCaption == 0 ) ? pWnd->caption() : tabCaption );
- m_pToolViews->insert( tvta, mtva );
-
- if ( pos == KDockWidget::DockNone )
- {
- mtva->d->widgetContainer->setEnableDocking( KDockWidget::DockNone );
- mtva->d->widgetContainer->reparent( this, (WFlags)(WType_TopLevel | WType_Dialog), r.topLeft(), true ); //pToolView->isVisible());
- }
- else //add and dock the toolview as a dockwidget view
- mtva->place( pos, pTargetWnd, percent );
-
-
- return mtva;
-}
-
-//============ attachWindow ============//
-void KMdiMainFrm::attachWindow( KMdiChildView *pWnd, bool bShow, bool bAutomaticResize )
-{
- pWnd->installEventFilter( this );
-
- // decide whether window shall be cascaded
- bool bCascade = false;
- TQApplication::sendPostedEvents();
- TQRect frameGeo = pWnd->frameGeometry();
- TQPoint topLeftScreen = pWnd->mapToGlobal( TQPoint( 0, 0 ) );
- TQPoint topLeftMdiChildArea = m_pMdi->mapFromGlobal( topLeftScreen );
- TQRect childAreaGeo = m_pMdi->geometry();
- if ( topLeftMdiChildArea.x() < 0 || topLeftMdiChildArea.y() < 0 ||
- ( topLeftMdiChildArea.x() + frameGeo.width() > childAreaGeo.width() ) ||
- ( topLeftMdiChildArea.y() + frameGeo.height() > childAreaGeo.height() ) )
- {
- bCascade = true;
- }
-
- // create frame and insert child view
- KMdiChildFrm *lpC = new KMdiChildFrm( m_pMdi );
- pWnd->hide();
- if ( !bCascade )
- lpC->move( topLeftMdiChildArea );
-
- lpC->setClient( pWnd, bAutomaticResize );
- lpC->setFocus();
- pWnd->youAreAttached( lpC );
- if ( ( m_mdiMode == KMdi::ToplevelMode ) && !parentWidget() )
- {
- setMinimumHeight( m_oldMainFrmMinHeight );
- setMaximumHeight( m_oldMainFrmMaxHeight );
- resize( width(), m_oldMainFrmHeight );
- m_oldMainFrmHeight = 0;
- switchToChildframeMode();
- }
-
- m_pMdi->manageChild( lpC, false, bCascade );
- if ( m_pMdi->topChild() && m_pMdi->topChild() ->isMaximized() )
- {
- TQRect r = lpC->geometry();
- lpC->setGeometry( -lpC->m_pClient->x(), -lpC->m_pClient->y(),
- m_pMdi->width() + KMDI_CHILDFRM_DOUBLE_BORDER,
- m_pMdi->height() + lpC->captionHeight() + KMDI_CHILDFRM_SEPARATOR + KMDI_CHILDFRM_DOUBLE_BORDER );
- lpC->setRestoreGeometry( r );
- }
-
- if ( bShow )
- {
- lpC->show();
- }
-
-#undef FocusIn
- TQFocusEvent fe( TQEvent::FocusIn );
- TQApplication::sendEvent( pWnd, &fe );
-
- m_pCurrentWindow = pWnd; // required for checking the active item
-}
-
-//============= detachWindow ==============//
-void KMdiMainFrm::detachWindow( KMdiChildView *pWnd, bool bShow )
-{
- if ( pWnd->isAttached() )
- {
- pWnd->removeEventFilter( this );
- pWnd->youAreDetached();
- // this is only if it was attached and you want to detach it
- if ( pWnd->parent() )
- {
- KMdiChildFrm * lpC = pWnd->mdiParent();
- if ( lpC )
- {
- if ( lpC->icon() )
- {
- TQPixmap pixm( *( lpC->icon() ) );
- pWnd->setIcon( pixm );
- }
- TQString capt( lpC->caption() );
- if ( !bShow )
- lpC->hide();
- lpC->unsetClient( m_undockPositioningOffset );
- m_pMdi->destroyChildButNotItsView( lpC, false ); //Do not focus the new top child , we loose focus...
- pWnd->setCaption( capt );
- }
- }
- }
- else
- {
- if ( pWnd->size().isEmpty() || ( pWnd->size() == TQSize( 1, 1 ) ) )
- {
- if ( m_pCurrentWindow )
- {
- pWnd->setGeometry( TQRect( m_pMdi->getCascadePoint( m_pDocumentViews->count() - 1 ), m_pCurrentWindow->size() ) );
- }
- else
- {
- pWnd->setGeometry( TQRect( m_pMdi->getCascadePoint( m_pDocumentViews->count() - 1 ), defaultChildFrmSize() ) );
- }
- }
-#ifdef Q_WS_X11
- if ( mdiMode() == KMdi::ToplevelMode )
- {
- XSetTransientForHint( tqt_xdisplay(), pWnd->winId(), topLevelWidget() ->winId() );
- }
-#endif
-
- return ;
- }
-
-#ifdef Q_WS_X11
- if ( mdiMode() == KMdi::ToplevelMode )
- {
- XSetTransientForHint( tqt_xdisplay(), pWnd->winId(), topLevelWidget() ->winId() );
- }
-#endif
-
- // this will show it...
- if ( bShow )
- {
- activateView( pWnd );
- }
-
- emit childViewIsDetachedNow( pWnd );
-}
-
-//============== removeWindowFromMdi ==============//
-void KMdiMainFrm::removeWindowFromMdi( KMdiChildView *pWnd )
-{
- Q_UNUSED( pWnd );
- //Closes a child window. sends no close event : simply deletes it
- //FIXME something wrong with this, but nobody knows whatcart
-#if 0
- if ( !( m_pWinList->removeRef( pWnd ) ) )
- return ;
- if ( m_pWinList->count() == 0 )
- m_pCurrentWindow = 0L;
-
- TQObject::disconnect( pWnd, TQT_SIGNAL( attachWindow( KMdiChildView*, bool ) ), this, TQT_SLOT( attachWindow( KMdiChildView*, bool ) ) );
- TQObject::disconnect( pWnd, TQT_SIGNAL( detachWindow( KMdiChildView*, bool ) ), this, TQT_SLOT( detachWindow( KMdiChildView*, bool ) ) );
- TQObject::disconnect( pWnd, TQT_SIGNAL( focusInEventOccurs( KMdiChildView* ) ), this, TQT_SLOT( activateView( KMdiChildView* ) ) );
- TQObject::disconnect( pWnd, TQT_SIGNAL( childWindowCloseRequest( KMdiChildView* ) ), this, TQT_SLOT( childWindowCloseRequest( KMdiChildView* ) ) );
- TQObject::disconnect( pWnd, TQT_SIGNAL( clickedInWindowMenu( int ) ), this, TQT_SLOT( windowMenuItemActivated( int ) ) );
- TQObject::disconnect( pWnd, TQT_SIGNAL( clickedInDockMenu( int ) ), this, TQT_SLOT( dockMenuItemActivated( int ) ) );
-
- if ( m_pTaskBar )
- {
- KMdiTaskBarButton * but = m_pTaskBar->getButton( pWnd );
- if ( but != 0L )
- {
- TQObject::disconnect( pWnd, TQT_SIGNAL( tabCaptionChanged( const TQString& ) ), but, TQT_SLOT( setNewText( const TQString& ) ) );
- }
- m_pTaskBar->removeWinButton( pWnd );
- }
-
- if ( m_mdiMode == KMdi::TabPageMode )
- {
- if ( m_pWinList->count() == 0 )
- {
- if ( !m_pDockbaseAreaOfDocumentViews )
- {
- m_pDockbaseAreaOfDocumentViews = createDockWidget( "mdiAreaCover", TQPixmap(), 0L, "mdi_area_cover" );
- m_pDockbaseAreaOfDocumentViews->setDockWindowTransient( this, true );
-
- m_pDockbaseAreaOfDocumentViews->setWidget( m_pMdi );
- setMainDockWidget( m_pDockbaseAreaOfDocumentViews );
- }
- m_pDockbaseOfTabPage->setDockSite( KDockWidget::DockFullSite );
- m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockCenter );
- m_pDockbaseAreaOfDocumentViews->manualDock( m_pDockbaseOfTabPage, KDockWidget::DockCenter );
- m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockNone );
- m_pDockbaseOfTabPage = m_pDockbaseAreaOfDocumentViews;
- m_pClose->hide();
- }
- KDockWidget* pDockW = ( KDockWidget* ) pWnd->parentWidget();
- pWnd->reparent( 0L, TQPoint( 0, 0 ) );
- pDockW->setWidget( 0L );
- if ( pDockW == m_pDockbaseOfTabPage )
- {
- TQTabWidget * pTab = ( TQTabWidget* ) pDockW->parentWidget() ->parentWidget();
- int cnt = pTab->count();
- m_pDockbaseOfTabPage = ( KDockWidget* ) pTab->page( cnt - 2 );
- if ( pDockW == m_pDockbaseOfTabPage )
- {
- m_pDockbaseOfTabPage = ( KDockWidget* ) pTab->page( cnt - 1 ); // different to the one deleted next
- }
- }
- delete pDockW;
- if ( m_pWinList->count() == 1 )
- {
- m_pWinList->last() ->activate(); // all other views are activated by tab switch
- }
- }
- else if ( pWnd->isAttached() )
- {
- pWnd->mdiParent() ->hide();
- m_pMdi->destroyChildButNotItsView( pWnd->mdiParent() );
- }
- else
- {
- // is not attached
- if ( m_pMdi->getVisibleChildCount() > 0 )
- {
- setActiveWindow();
- m_pCurrentWindow = 0L;
- KMdiChildView* pView = m_pMdi->topChild() ->m_pClient;
- if ( pView )
- {
- pView->activate();
- }
- }
- else if ( m_pWinList->count() > 0 )
- {
- //crash? m_pWinList->last()->activate();
- //crash? m_pWinList->last()->setFocus();
- }
- }
-
- if ( pWnd->isToolView() )
- pWnd->m_bToolView = false;
-
- if ( !m_pCurrentWindow )
- emit lastChildViewClosed();
-#endif
-}
-
-//============== closeWindow ==============//
-void KMdiMainFrm::closeWindow( KMdiChildView *pWnd, bool layoutTaskBar )
-{
- if ( !pWnd )
- return ;
- //Closes a child window. sends no close event : simply deletes it
- m_pDocumentViews->removeRef( pWnd );
- if ( m_pDocumentViews->count() == 0 )
- m_pCurrentWindow = 0L;
-
- if ( m_pTaskBar )
- {
- m_pTaskBar->removeWinButton( pWnd, layoutTaskBar );
- }
-
- if ( ( m_mdiMode == KMdi::TabPageMode ) || ( m_mdiMode == KMdi::IDEAlMode ) )
- {
- if ( !m_documentTabWidget )
- return ; //oops
- if ( m_pDocumentViews->count() == 0 )
- m_pClose->hide();
- pWnd->reparent( 0L, TQPoint( 0, 0 ) );
- kdDebug(760) << "-------- 1" << endl;
- if ( m_pDocumentViews->count() == 1 )
- {
- m_pDocumentViews->last() ->activate(); // all other views are activated by tab switch
- }
- }
- if ( ( m_mdiMode == KMdi::TabPageMode ) || ( m_mdiMode == KMdi::IDEAlMode ) )
- {
- if ( m_pDocumentViews->count() == 0 )
- {
- if ( !m_pDockbaseAreaOfDocumentViews )
- {
- m_pDockbaseAreaOfDocumentViews = createDockWidget( "mdiAreaCover", TQPixmap(), 0L, "mdi_area_cover" );
- m_pDockbaseAreaOfDocumentViews->setDockWindowTransient( this, true );
- m_pDockbaseAreaOfDocumentViews->setWidget( m_pMdi );
- setMainDockWidget( m_pDockbaseAreaOfDocumentViews );
- }
-#if 0
- m_pDockbaseOfTabPage->setDockSite( KDockWidget::DockFullSite );
- m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockCenter );
- m_pDockbaseAreaOfDocumentViews->manualDock( m_pDockbaseOfTabPage, KDockWidget::DockCenter );
- m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockNone );
- m_pDockbaseOfTabPage = m_pDockbaseAreaOfDocumentViews;
-#endif
-
- m_pClose->hide();
- }
-#if 0
- KDockWidget* pDockW = ( KDockWidget* ) pWnd->parentWidget();
- pWnd->reparent( 0L, TQPoint( 0, 0 ) );
- pDockW->setWidget( 0L );
- if ( pDockW == m_pDockbaseOfTabPage )
- {
- TQTabWidget * pTab = ( TQTabWidget* ) pDockW->parentWidget() ->parentWidget();
- int cnt = pTab->count();
- m_pDockbaseOfTabPage = ( KDockWidget* ) pTab->page( cnt - 2 );
- if ( pDockW == m_pDockbaseOfTabPage )
- {
- m_pDockbaseOfTabPage = ( KDockWidget* ) pTab->page( cnt - 1 ); // different to the one deleted next
- }
- }
- delete pDockW;
-#endif
-
- delete pWnd;
- if ( m_pDocumentViews->count() == 1 )
- {
- m_pDocumentViews->last() ->activate(); // all other views are activated by tab switch
- }
- }
- else if ( pWnd->isAttached() )
- {
- m_pMdi->destroyChild( pWnd->mdiParent() );
- }
- else
- {
- delete pWnd;
- // is not attached
- if ( m_pMdi->getVisibleChildCount() > 0 )
- {
- setActiveWindow();
- m_pCurrentWindow = 0L;
- KMdiChildView* pView = m_pMdi->topChild() ->m_pClient;
- if ( pView )
- {
- pView->activate();
- }
- }
- else if ( m_pDocumentViews->count() > 0 )
- {
- if ( m_pDocumentViews->current() )
- {
- m_pDocumentViews->current() ->activate();
- m_pDocumentViews->current() ->setFocus();
- }
- else
- {
- m_pDocumentViews->last() ->activate();
- m_pDocumentViews->last() ->setFocus();
- }
- }
- }
-
- if ( !m_pCurrentWindow )
- {
- d->closeWindowAction->setEnabled(false);
- emit lastChildViewClosed();
- }
-}
-
-//================== findWindow =================//
-KMdiChildView* KMdiMainFrm::findWindow( const TQString& caption )
-{
- TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
- for ( ; ( *it ); ++it )
- {
- if ( ( *it )->caption() == caption )
- return ( *it );
- }
- return 0L;
-}
-
-//================== activeWindow ===================//
-KMdiChildView* KMdiMainFrm::activeWindow()
-{
- return m_pCurrentWindow;
-}
-
-//================== windowExists ? =================//
-bool KMdiMainFrm::windowExists( KMdiChildView *pWnd, ExistsAs as )
-{
- if ( ( as == ToolView ) || ( as == AnyView ) )
- {
- if ( m_pToolViews->contains( pWnd ) )
- return true;
- if ( as == ToolView )
- return false;
- }
-
- if ( m_pDocumentViews->findRef( pWnd ) != -1 )
- return true;
-
- return false;
-}
-
-TQPopupMenu * KMdiMainFrm::windowPopup( KMdiChildView * pWnd, bool bIncludeTaskbarPopup )
-{
- m_pWindowPopup->clear();
- if ( bIncludeTaskbarPopup )
- {
- m_pWindowPopup->insertItem( i18n( "Window" ), taskBarPopup( pWnd, false ) );
- m_pWindowPopup->insertSeparator();
- }
- return m_pWindowPopup;
-}
-
-//================ taskBarPopup =================//
-TQPopupMenu* KMdiMainFrm::taskBarPopup( KMdiChildView *pWnd, bool /*bIncludeWindowPopup*/ )
-{
- //returns the g_pTaskBarPopup filled according to the KMdiChildView state
- m_pTaskBarPopup->clear();
- if ( pWnd->isAttached() )
- {
- m_pTaskBarPopup->insertItem( i18n( "Undock" ), pWnd, TQT_SLOT( detach() ) );
- m_pTaskBarPopup->insertSeparator();
- if ( pWnd->isMinimized() || pWnd->isMaximized() )
- m_pTaskBarPopup->insertItem( i18n( "Restore" ), pWnd, TQT_SLOT( restore() ) );
- if ( !pWnd->isMaximized() )
- m_pTaskBarPopup->insertItem( i18n( "Maximize" ), pWnd, TQT_SLOT( maximize() ) );
- if ( !pWnd->isMinimized() )
- m_pTaskBarPopup->insertItem( i18n( "Minimize" ), pWnd, TQT_SLOT( minimize() ) );
- }
- else
- m_pTaskBarPopup->insertItem( i18n( "Dock" ), pWnd, TQT_SLOT( attach() ) );
- m_pTaskBarPopup->insertSeparator();
- m_pTaskBarPopup->insertItem( i18n( "Close" ), pWnd, TQT_SLOT( close() ) );
- // the window has a view...get the window popup
- m_pTaskBarPopup->insertSeparator();
- m_pTaskBarPopup->insertItem( i18n( "Operations" ), windowPopup( pWnd, false ) ); //alvoid recursion
- return m_pTaskBarPopup;
-}
-
-void KMdiMainFrm::slotDocCurrentChanged( TQWidget* pWidget )
-{
- KMdiChildView * pWnd = static_cast<KMdiChildView*>( pWidget );
- pWnd->m_bMainframesActivateViewIsPending = true;
-
- bool bActivateNecessary = true;
- if ( m_pCurrentWindow != pWnd )
- m_pCurrentWindow = pWnd;
-
- if ( m_pTaskBar )
- m_pTaskBar->setActiveButton( pWnd );
-
- if ( m_documentTabWidget && ( m_mdiMode == KMdi::TabPageMode || m_mdiMode == KMdi::IDEAlMode ) )
- {
- m_documentTabWidget->showPage( pWnd );
- pWnd->activate();
- }
- else
- {
- if ( pWnd->isAttached() )
- {
- if ( bActivateNecessary && ( m_pMdi->topChild() == pWnd->mdiParent() ) )
- pWnd->activate();
-
- pWnd->mdiParent()->raiseAndActivate();
- }
- if ( !pWnd->isAttached() )
- {
- if ( bActivateNecessary )
- pWnd->activate();
-
- m_pMdi->setTopChild( 0L ); // lose focus in the mainframe window
- if ( !pWnd->isActiveWindow() )
- pWnd->setActiveWindow();
-
- pWnd->raise();
- }
- }
- if ( !switching() )
- activeWindow()->updateTimeStamp();
- emit collapseOverlapContainers();
- pWnd->m_bMainframesActivateViewIsPending = false;
-}
-
-
-void KMdiMainFrm::activateView( KMdiChildView* pWnd )
-{
- pWnd->m_bMainframesActivateViewIsPending = true;
-
- bool bActivateNecessary = true;
- if ( m_pCurrentWindow != pWnd )
- m_pCurrentWindow = pWnd;
- else
- {
- bActivateNecessary = false;
- // if this method is called as answer to view->activate(),
- // interrupt it because it's not necessary
- pWnd->m_bInterruptActivation = true;
- }
-
- if ( m_pTaskBar )
- m_pTaskBar->setActiveButton( pWnd );
-
- if ( m_documentTabWidget && m_mdiMode == KMdi::TabPageMode || m_mdiMode == KMdi::IDEAlMode )
- {
- m_documentTabWidget->showPage( pWnd );
- pWnd->activate();
- }
- else
- {
- if ( pWnd->isAttached() )
- {
- if ( bActivateNecessary && ( m_pMdi->topChild() == pWnd->mdiParent() ) )
- pWnd->activate();
-
- pWnd->mdiParent() ->raiseAndActivate();
- }
- if ( !pWnd->isAttached() )
- {
- if ( bActivateNecessary )
- pWnd->activate();
-
- m_pMdi->setTopChild( 0L ); // lose focus in the mainframe window
- if ( !pWnd->isActiveWindow() )
- pWnd->setActiveWindow();
-
- pWnd->raise();
- }
- }
-
- emit collapseOverlapContainers();
-
- pWnd->m_bMainframesActivateViewIsPending = false;
-}
-
-void KMdiMainFrm::taskbarButtonRightClicked( KMdiChildView *pWnd )
-{
- activateView( pWnd ); // set focus
- //TQApplication::sendPostedEvents();
- taskBarPopup( pWnd, true ) ->popup( TQCursor::pos() );
-}
-
-void KMdiMainFrm::childWindowCloseRequest( KMdiChildView *pWnd )
-{
- KMdiViewCloseEvent * ce = new KMdiViewCloseEvent( pWnd );
- TQApplication::postEvent( this, ce );
-}
-
-bool KMdiMainFrm::event( TQEvent* e )
-{
- if ( e->type() == TQEvent::User )
- {
- KMdiChildView * pWnd = ( KMdiChildView* ) ( ( KMdiViewCloseEvent* ) e )->data();
- if ( pWnd != 0L )
- closeWindow( pWnd );
- return true;
- // A little hack: If MDI child views are moved implicietly by moving
- // the main widget they should know this too. Unfortunately there seems to
- // be no way to catch the move start / move stop situations for the main
- // widget in a clean way. (There is no MouseButtonPress/Release or
- // something like that.) Therefore we do the following: When we get the
- // "first" move event we start a timer and interprete it as "drag begin".
- // If we get the next move event and the timer is running we restart the
- // timer and don't do anything else. If the timer elapses (this meens we
- // haven't had any move event for a while) we interprete this as "drag
- // end". If the moving didn't stop actually, we will later get another
- // "drag begin", so we get a drag end too much, but this would be the same
- // as if the user would stop moving for a little while.
- // Actually we seem to be lucky that the timer does not elapse while we
- // are moving -> so we have no obsolete drag end / begin
- }
- else if ( isVisible() && e->type() == TQEvent::Move )
- {
- if ( m_pDragEndTimer->isActive() )
- {
- // this is not the first move -> stop old timer
- m_pDragEndTimer->stop();
- }
- else
- {
- // this is the first move -> send the drag begin to all concerned views
- TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
- for ( ; ( *it ); ++it )
- {
- KMdiChildFrmDragBeginEvent dragBeginEvent( 0L );
- TQApplication::sendEvent( ( *it ), &dragBeginEvent );
- }
- }
- m_pDragEndTimer->start( 200, true ); // single shot after 200 ms
- }
-
- return DockMainWindow::event( e );
-}
-
-bool KMdiMainFrm::eventFilter( TQObject * /*obj*/, TQEvent *e )
-{
- if ( e->type() == TQEvent::Resize && m_mdiMode == KMdi::ToplevelMode )
- {
- verifyToplevelHeight();
- return false; //let the rest of the resize magic do its work
- }
-
- if ( e->type() == TQEvent::FocusIn )
- {
- TQFocusEvent * pFE = ( TQFocusEvent* ) e;
- if ( pFE->reason() == TQFocusEvent::ActiveWindow )
- {
- if ( m_pCurrentWindow && !m_pCurrentWindow->isHidden() &&
- !m_pCurrentWindow->isAttached() && m_pMdi->topChild() )
- {
- return true; // eat the event
- }
- }
- if ( m_pMdi )
- {
- static bool focusTCIsPending = false;
- if ( !focusTCIsPending && m_mdiMode == KMdi::ChildframeMode )
- {
- focusTCIsPending = true;
- m_pMdi->focusTopChild();
- focusTCIsPending = false;
- }
- }
- }
- else if ( e->type() == TQEvent::KeyRelease )
- {
- if ( switching() )
- {
- KAction * a = actionCollection() ->action( "view_last_window" ) ;
- if ( a )
- {
- const KShortcut cut( a->shortcut() );
- const KKeySequence& seq = cut.seq( 0 );
- const KKey& key = seq.key( 0 );
- int modFlags = key.modFlags();
- int state = ( ( TQKeyEvent * ) e ) ->state();
- KKey key2( ( TQKeyEvent * ) e );
-
- /** these are quite some assumptions:
- * The key combination uses exactly one modifier key
- * The WIN button in KDE is the meta button in Qt
- **/
- if ( state != ( ( TQKeyEvent * ) e ) ->stateAfter() &&
- ( ( modFlags & KKey::CTRL ) > 0 ) == ( ( state & TQt::ControlButton ) > 0 ) &&
- ( ( modFlags & KKey::ALT ) > 0 ) == ( ( state & TQt::AltButton ) > 0 ) &&
- ( ( modFlags & KKey::WIN ) > 0 ) == ( ( state & TQt::MetaButton ) > 0 ) )
- {
- activeWindow() ->updateTimeStamp();
- setSwitching( false );
- }
- return true;
- }
- else
- {
- kdDebug(760) << "KAction( \"view_last_window\") not found." << endl;
- }
- }
- }
- return false; // standard event processing
-}
-
-/**
- * close all views
- */
-void KMdiMainFrm::closeAllViews()
-{
- //save the children first to a list, as removing invalidates our iterator
- TQValueList<KMdiChildView*> children;
- for ( KMdiChildView * w = m_pDocumentViews->first();w;w = m_pDocumentViews->next() )
- {
- children.append( w );
- }
- TQValueListIterator<KMdiChildView *> childIt;
- for ( childIt = children.begin(); childIt != children.end(); ++childIt )
- {
- ( *childIt )->close();
- }
-}
-
-
-/**
- * iconify all views
- */
-void KMdiMainFrm::iconifyAllViews()
-{
- kdDebug(760) << k_funcinfo << "minimizing all the views" << endl;
- TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
- for ( ; ( *it ); ++it )
- ( *it )->minimize();
-}
-
-/**
- * closes the view of the active (topchild) window
- */
-void KMdiMainFrm::closeActiveView()
-{
- kdDebug(760) << k_funcinfo << "closing the active view" << endl;
- if ( m_pCurrentWindow )
- m_pCurrentWindow->close();
-}
-
-/** find the root dockwidgets and store their geometry */
-void KMdiMainFrm::findRootDockWidgets( TQPtrList<KDockWidget>* rootDockWidgetList, TQValueList<TQRect>* positionList )
-{
- //nothing is valid
- if ( !rootDockWidgetList && !positionList )
- return ;
-
- // since we set some windows to toplevel, we must consider the window manager's window frame
- const int frameBorderWidth = 7; // @todo: Can we / do we need to ask the window manager?
- const int windowTitleHeight = 10; // @todo: -"-
-
- TQObjectList* pObjList = queryList( "KDockWidget" );
- if ( pObjList->isEmpty() )
- pObjList = queryList( "KDockWidget_Compat::KDockWidget" );
-
- TQObjectListIt it( *pObjList );
- // for all dockwidgets (which are children of this mainwindow)
- while ( ( *it ) )
- {
- KDockWidget* dockWindow = 0L; /* pDockW */
- KDockWidget* rootDockWindow = 0L; /* pRootDockWindow */
- KDockWidget* undockCandidate = 0L; /* pUndockCandidate */
- TQWidget* pW = TQT_TQWIDGET( ( *it ) );
-
- // find the oldest ancestor of the current dockwidget that can be undocked
- while ( !pW->isTopLevel() )
- {
- if ( ::tqqt_cast<KDockWidget*>( pW ) || pW->inherits( "KDockWidget_Compat::KDockWidget" ) )
- {
- undockCandidate = static_cast<KDockWidget*>( pW );
- if ( undockCandidate->enableDocking() != KDockWidget::DockNone )
- rootDockWindow = undockCandidate;
- }
- pW = pW->parentWidget();
- }
-
- if ( rootDockWindow )
- {
- // if that oldest ancestor is not already in the list, append it
- bool found = false;
- if ( !rootDockWidgetList->isEmpty() )
- {
- TQPtrListIterator<KDockWidget> it2( *rootDockWidgetList );
- for ( ; it2.current() && !found; ++it2 )
- {
- dockWindow = it2.current();
- if ( dockWindow == rootDockWindow )
- found = true;
- }
- }
-
- if ( !found || rootDockWidgetList->isEmpty() )
- {
- rootDockWidgetList->append( dockWindow );
- kdDebug(760) << k_funcinfo << "Appending " << rootDockWindow << " to our list of " <<
- "root dock windows" << endl;
- TQPoint p = rootDockWindow->mapToGlobal( rootDockWindow->pos() ) - rootDockWindow->pos();
- TQRect r( p.x(), p.y() + m_undockPositioningOffset.y(),
- rootDockWindow->width() - windowTitleHeight - frameBorderWidth * 2,
- rootDockWindow->height() - windowTitleHeight - frameBorderWidth * 2 );
- positionList->append( r );
- }
- }
- ++it;
- }
- delete pObjList;
-}
-
-/**
- * undocks all view windows (unix-like)
- */
-void KMdiMainFrm::switchToToplevelMode()
-{
- if ( m_mdiMode == KMdi::ToplevelMode )
- {
- emit mdiModeHasBeenChangedTo( KMdi::ToplevelMode );
- return ;
- }
-
- KMdi::MdiMode oldMdiMode = m_mdiMode;
-
- const int frameBorderWidth = 7; // @todo: Can we / do we need to ask the window manager?
- setUndockPositioningOffset( TQPoint( 0, ( m_pTaskBar ? m_pTaskBar->height() : 0 ) + frameBorderWidth ) );
-
- // 1.) select the dockwidgets to be undocked and store their geometry
- TQPtrList<KDockWidget> rootDockWidgetList;
- TQValueList<TQRect> positionList;
-
- // 2.) undock the MDI views of KMDI
- switch( oldMdiMode )
- {
- case KMdi::ChildframeMode:
- finishChildframeMode();
- break;
- case KMdi::TabPageMode:
- finishTabPageMode();
- break;
- case KMdi::IDEAlMode:
- finishIDEAlMode();
- findRootDockWidgets( &rootDockWidgetList, &positionList );
- break;
- default:
- break; //do nothing
- }
-
- // 3.) undock all these found oldest ancestors (being KDockWidgets)
- TQPtrListIterator<KDockWidget> kdwit( rootDockWidgetList );
- for ( ; ( *kdwit ); ++kdwit )
- ( *kdwit )->undock();
-
- // 4.) recreate the MDI childframe area and hide it
- if ( oldMdiMode == KMdi::TabPageMode || oldMdiMode == KMdi::IDEAlMode )
- {
- if ( !m_pDockbaseAreaOfDocumentViews )
- {
- m_pDockbaseAreaOfDocumentViews = createDockWidget( "mdiAreaCover", TQPixmap(), 0L, "mdi_area_cover" );
- m_pDockbaseAreaOfDocumentViews->setDockWindowTransient( this, true );
- m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockNone );
- m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockCorner );
- m_pDockbaseAreaOfDocumentViews->setWidget( m_pMdi );
- }
- // set this dock to main view
- setView( m_pDockbaseAreaOfDocumentViews );
- setMainDockWidget( m_pDockbaseAreaOfDocumentViews );
- }
- // TQApplication::sendPostedEvents(); //why do we need to empty the event queue?
- if ( !parentWidget() )
- {
- //if we don't have a parent widget ( which i expect we wouldn't )
- //make sure we take into account the size of the docks provided by
- //QMainWindow
- int topDockHeight = topDock() ? topDock()->height() : 0;
- int bottomDockHeight = bottomDock() ? bottomDock()->height() : 0;
- int menuBarHeight = hasMenuBar() ? menuBar()->height() : 0;
- if ( m_pDocumentViews->count() != 0 )
- setFixedHeight( height() - m_pDockbaseAreaOfDocumentViews->height() );
- else
- {
- kdDebug(760) << k_funcinfo << "height is: " << height() << endl;
- kdDebug(760) << k_funcinfo << "top dock height: " << topDockHeight << endl;
- kdDebug(760) << k_funcinfo << "bottom dock height: " << bottomDockHeight << endl;
- kdDebug(760) << k_funcinfo << "menu bar height: " << menuBarHeight << endl;
- kdDebug(760) << k_funcinfo << "dock base area height: " << m_pDockbaseAreaOfDocumentViews->height() << endl;
- setFixedHeight( topDockHeight + menuBarHeight );
- }
- }
-
- //FIXME although i don't know what to fix
- // 5. show the child views again
- TQPtrListIterator<KMdiChildView> kmdicvit( *m_pDocumentViews );
- for ( kmdicvit.toFirst(); ( *kmdicvit ); ++kmdicvit )
- {
-#ifdef Q_WS_X11
- XSetTransientForHint( tqt_xdisplay(), ( *kmdicvit )->winId(), winId() );
-#endif
- ( *kmdicvit )->show();
- }
-
- // 6.) reset all memorized positions of the undocked ones and show them again
- TQValueList<TQRect>::Iterator qvlqrit;
- TQValueList<TQRect>::Iterator qvlEnd = positionList.end();
- for ( kmdicvit.toFirst(), qvlqrit = positionList.begin() ; ( *kmdicvit ) && qvlqrit != qvlEnd; ++kmdicvit, ++qvlqrit )
- {
- ( *kmdicvit )->setGeometry( ( *qvlqrit ) );
- ( *kmdicvit )->show();
- }
-
- m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockNone );
- m_mdiMode = KMdi::ToplevelMode;
-
- kdDebug(760) << k_funcinfo << "Switch to toplevel mode completed" << endl;
- emit mdiModeHasBeenChangedTo( KMdi::ToplevelMode );
-
-}
-
-void KMdiMainFrm::finishToplevelMode()
-{
- m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockCorner );
-}
-
-/**
- * docks all view windows (Windows-like)
- */
-void KMdiMainFrm::switchToChildframeMode()
-{
- if ( m_mdiMode == KMdi::ChildframeMode )
- {
- emit mdiModeHasBeenChangedTo( KMdi::ChildframeMode );
- return ;
- }
-
- TQPtrList<KDockWidget> rootDockWidgetList;
- TQValueList<TQRect> positionList;
-
- if ( m_mdiMode == KMdi::TabPageMode )
- {
- kdDebug(760) << k_funcinfo << "finishing tab page mode" << endl;
- // select the dockwidgets to be undocked and store their geometry
- findRootDockWidgets( &rootDockWidgetList, &positionList );
- kdDebug(760) << k_funcinfo << "Found " << rootDockWidgetList.count() << " widgets to undock" << endl;
-
- // undock all these found oldest ancestors (being KDockWidgets)
- TQPtrListIterator<KDockWidget> it( rootDockWidgetList );
- for ( ; ( *it ) ; ++it )
- ( *it )->undock();
-
- finishTabPageMode();
- }
- else if ( m_mdiMode == KMdi::ToplevelMode )
- {
- finishToplevelMode();
- }
- else if ( m_mdiMode == KMdi::IDEAlMode )
- {
- kdDebug(760) << k_funcinfo << "finishing ideal mode" << endl;
- finishIDEAlMode( false );
-
- // select the dockwidgets to be undocked and store their geometry
- findRootDockWidgets( &rootDockWidgetList, &positionList );
- kdDebug(760) << k_funcinfo << "Found " << rootDockWidgetList.count() << " widgets to undock" << endl;
-
- // undock all these found oldest ancestors (being KDockWidgets)
- TQPtrListIterator<KDockWidget> it( rootDockWidgetList );
- for ( ; ( *it ) ; ++it )
- ( *it )->undock();
-
- m_mdiMode = KMdi::TabPageMode;
- finishTabPageMode();
- m_mdiMode = KMdi::IDEAlMode;
- }
-
- if ( !m_pDockbaseAreaOfDocumentViews )
- {
- // cover KMdi's childarea by a dockwidget
- m_pDockbaseAreaOfDocumentViews = createDockWidget( "mdiAreaCover", TQPixmap(), 0L, "mdi_area_cover" );
- m_pDockbaseAreaOfDocumentViews->setDockWindowTransient( this, true );
- m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockNone );
- m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockCorner );
- m_pDockbaseAreaOfDocumentViews->setWidget( m_pMdi );
- kdDebug(760) << k_funcinfo << "childarea is now covered by a dockwidget" << endl;
- }
-
- if ( m_pDockbaseAreaOfDocumentViews->isTopLevel() )
- {
- // set this dock to main view
- setView( m_pDockbaseAreaOfDocumentViews );
- setMainDockWidget( m_pDockbaseAreaOfDocumentViews );
- m_pDockbaseAreaOfDocumentViews->setEnableDocking( KDockWidget::DockNone );
- m_pDockbaseAreaOfDocumentViews->setDockSite( KDockWidget::DockCorner );
- kdDebug(760) << k_funcinfo << "Dock base area has been set to the main view" << endl;
- }
- m_pDockbaseAreaOfDocumentViews->setWidget( m_pMdi ); //JW
- m_pDockbaseAreaOfDocumentViews->show();
-
- if ( ( m_mdiMode == KMdi::TabPageMode ) || ( m_mdiMode == KMdi::IDEAlMode ) )
- {
- kdDebug(760) << k_funcinfo << "trying to dock back the undock toolviews" << endl;
- TQPtrListIterator<KDockWidget> it( rootDockWidgetList );
- for ( ; ( *it ); ++it )
- ( *it )->dockBack();
- }
-
- if ( m_mdiMode == KMdi::ToplevelMode && m_pTempDockSession )
- {
- // restore the old dock scenario which we memorized at the time we switched to toplevel mode
- kdDebug(760) << k_funcinfo << "Restoring old dock scenario memorized from toplevel mode" << endl;
- TQDomElement oldDockState = m_pTempDockSession->namedItem( "cur_dock_state" ).toElement();
- readDockConfig( oldDockState );
- }
-
- KMdi::MdiMode oldMdiMode = m_mdiMode;
- m_mdiMode = KMdi::ChildframeMode;
-
- //FIXME although i don't know what to fix.
- TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
- for ( ; ( *it ); ++it )
- {
- KMdiChildView* pView = ( *it );
- if ( !pView->isToolView() && pView->isAttached() )
- attachWindow( pView, true );
- }
- for ( it.toFirst(); ( *it ); ++it )
- {
- KMdiChildView* pView = ( *it );
- if ( !pView->isToolView() )
- pView->show();
- }
- if ( ( oldMdiMode == KMdi::ToplevelMode ) && !parentWidget() )
- {
- setMinimumHeight( m_oldMainFrmMinHeight );
- setMaximumHeight( m_oldMainFrmMaxHeight );
- resize( width(), m_oldMainFrmHeight );
- m_oldMainFrmHeight = 0;
- kdDebug(760) << k_funcinfo << "left top level mode completely" << endl;
- emit leftTopLevelMode();
- }
- emit mdiModeHasBeenChangedTo( KMdi::ChildframeMode );
-}
-
-void KMdiMainFrm::finishChildframeMode()
-{
- // save the old dock scenario of the dockwidget-like tool views to a DOM tree
- kdDebug(760) << k_funcinfo << "saving the current dock scenario" << endl;
- delete m_pTempDockSession;
- m_pTempDockSession = new TQDomDocument( "docksession" );
- TQDomElement curDockState = m_pTempDockSession->createElement( "cur_dock_state" );
- m_pTempDockSession->appendChild( curDockState );
- writeDockConfig( curDockState );
-
- // detach all non-tool-views to toplevel
- kdDebug(760) << k_funcinfo << "detaching all document views and moving them to toplevel" << endl;
- TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
- for ( ; ( *it ); ++it )
- {
- KMdiChildView* pView = ( *it );
- if ( pView->isToolView() )
- continue;
- if ( pView->isAttached() )
- {
- if ( pView->isMaximized() )
- pView->mdiParent()->setGeometry( 0, 0, m_pMdi->width(), m_pMdi->height() );
- detachWindow( pView, false );
- }
- }
-}
-
-/**
- * Docks all view windows (Windows-like)
- */
-void KMdiMainFrm::switchToTabPageMode()
-{
- if ( m_mdiMode == KMdi::TabPageMode )
- {
- emit mdiModeHasBeenChangedTo( KMdi::TabPageMode );
- return ; // nothing need to be done
- }
-
- switch( m_mdiMode )
- {
- case KMdi::ChildframeMode:
- finishChildframeMode();
- break;
- case KMdi::ToplevelMode:
- finishToplevelMode();
- break;
- case KMdi::IDEAlMode:
- finishIDEAlMode( false );
- emit mdiModeHasBeenChangedTo( KMdi::TabPageMode );
- m_mdiMode = KMdi::TabPageMode;
- return;
- break;
- default:
- break;
- }
-
- setupTabbedDocumentViewSpace();
- m_mdiMode = KMdi::TabPageMode;
- if ( m_pCurrentWindow )
- m_pCurrentWindow->setFocus();
-
- m_pTaskBar->switchOn( false );
-
- if ( m_pClose )
- {
- TQObject::connect( m_pClose, TQT_SIGNAL( clicked() ), this, TQT_SLOT( closeViewButtonPressed() ) );
- if ( m_pDocumentViews->count() > 0 )
- m_pClose->show();
- }
- else
- kdDebug(760) << "close button nonexistant. strange things might happen" << endl;
-
- kdDebug(760) << "Switch to tab page mode complete" << endl;
- emit mdiModeHasBeenChangedTo( KMdi::TabPageMode );
-}
-
-void KMdiMainFrm::finishTabPageMode()
-{
- // if tabified, release all views from their docking covers
- if ( m_mdiMode == KMdi::TabPageMode )
- {
- m_pClose->hide();
- TQObject::disconnect( m_pClose, TQT_SIGNAL( clicked() ), this, TQT_SLOT( closeViewButtonPressed() ) );
-
- TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
- for ( ; it.current(); ++it )
- {
- KMdiChildView* pView = it.current();
- if ( pView->isToolView() )
- continue;
- kdDebug(760) << "KMdiMainFrm::finishTabPageMode: in loop" << endl;
- TQSize mins = pView->minimumSize();
- TQSize maxs = pView->maximumSize();
- TQSize sz = pView->size();
- TQWidget* pParent = pView->parentWidget();
- TQPoint p( pParent->mapToGlobal( pParent->pos() ) - pParent->pos() + m_undockPositioningOffset );
- m_documentTabWidget->removePage( pView );
- pView->reparent( 0, 0, p );
- // pView->reparent(0,0,p);
- pView->resize( sz );
- pView->setMinimumSize( mins.width(), mins.height() );
- pView->setMaximumSize( maxs.width(), maxs.height() );
- // ((KDockWidget*)pParent)->undock(); // this destroys the dockwiget cover, too
- // pParent->close();
- // delete pParent;
- // if (centralWidget() == pParent) {
- // setCentralWidget(0L); // avoid dangling pointer
- // }
- }
- delete m_documentTabWidget;
- m_documentTabWidget = 0;
- m_pTaskBar->switchOn( true );
- }
-}
-
-
-
-void KMdiMainFrm::setupTabbedDocumentViewSpace()
-{
- // resize to childframe mode size of the mainwindow if we were in toplevel mode
- if ( ( m_mdiMode == KMdi::ToplevelMode ) && !parentWidget() )
- {
- setMinimumHeight( m_oldMainFrmMinHeight );
- setMaximumHeight( m_oldMainFrmMaxHeight );
- resize( width(), m_oldMainFrmHeight );
- m_oldMainFrmHeight = 0;
- //tqDebug("TopLevelMode off");
- emit leftTopLevelMode();
- TQApplication::sendPostedEvents();
-
- // restore the old dock szenario which we memorized at the time we switched to toplevel mode
- if ( m_pTempDockSession )
- {
- TQDomElement oldDockState = m_pTempDockSession->namedItem( "cur_dock_state" ).toElement();
- readDockConfig( oldDockState );
- }
- }
-
-#if 0
- if ( m_pDockbaseOfTabPage != m_pDockbaseAreaOfDocumentViews )
- {
- delete m_pDockbaseOfTabPage;
- m_pDockbaseOfTabPage = m_pDockbaseAreaOfDocumentViews;
- }
-#endif
- delete m_documentTabWidget;
- m_documentTabWidget = new KMdiDocumentViewTabWidget( m_pDockbaseAreaOfDocumentViews );
- connect( m_documentTabWidget, TQT_SIGNAL( currentChanged( TQWidget* ) ), this, TQT_SLOT( slotDocCurrentChanged( TQWidget* ) ) );
- m_pDockbaseAreaOfDocumentViews->setWidget( m_documentTabWidget );
- m_documentTabWidget->show();
- TQPtrListIterator<KMdiChildView> it4( *m_pDocumentViews );
- for ( ; it4.current(); ++it4 )
- {
- KMdiChildView* pView = it4.current();
- m_documentTabWidget->addTab( pView, pView->icon() ? *( pView->icon() ) : TQPixmap(), pView->tabCaption() );
- /*
- connect(pView,TQT_SIGNAL(iconOrCaptionUdpated(TQWidget*,TQPixmap,const TQString&)),
- m_documentTabWidget,TQT_SLOT(updateView(TQWidget*,TQPixmap,const TQString&)));
- */
- connect( pView, TQT_SIGNAL( iconUpdated( TQWidget*, TQPixmap ) ), m_documentTabWidget, TQT_SLOT( updateIconInView( TQWidget*, TQPixmap ) ) );
- connect( pView, TQT_SIGNAL( captionUpdated( TQWidget*, const TQString& ) ), m_documentTabWidget, TQT_SLOT( updateCaptionInView( TQWidget*, const TQString& ) ) );
-
- }
-}
-
-
-void KMdiMainFrm::setIDEAlModeStyle( int flags )
-{
- d->m_styleIDEAlMode = flags; // see KMultiTabBar for the first 3 bits
- if ( m_leftContainer )
- {
- KMdiDockContainer * tmpL = ::tqqt_cast<KMdiDockContainer*>( m_leftContainer->getWidget() );
- if ( tmpL )
- tmpL->setStyle( flags );
- }
-
- if ( m_rightContainer )
- {
- KMdiDockContainer * tmpR = ::tqqt_cast<KMdiDockContainer*>( m_rightContainer->getWidget() );
- if ( tmpR )
- tmpR->setStyle( flags );
- }
-
- if ( m_topContainer )
- {
- KMdiDockContainer * tmpT = ::tqqt_cast<KMdiDockContainer*>( m_topContainer->getWidget() );
- if ( tmpT )
- tmpT->setStyle( flags );
- }
-
- if ( m_bottomContainer )
- {
- KMdiDockContainer * tmpB = ::tqqt_cast<KMdiDockContainer*>( m_bottomContainer->getWidget() );
- if ( tmpB )
- tmpB->setStyle( flags );
- }
-}
-
-void KMdiMainFrm::setToolviewStyle( int flag )
-{
- if ( m_mdiMode == KMdi::IDEAlMode )
- {
- setIDEAlModeStyle( flag );
- }
- d->m_toolviewStyle = flag;
- bool toolviewExists = false;
- TQMap<TQWidget*, KMdiToolViewAccessor*>::Iterator it;
- for ( it = m_pToolViews->begin(); it != m_pToolViews->end(); ++it )
- {
- KDockWidget *dockWidget = tqt_dynamic_cast<KDockWidget*>( it.data()->wrapperWidget() );
- if ( dockWidget )
- {
- switch ( flag )
- {
- case KMdi::IconOnly:
- dockWidget->setTabPageLabel( TQString::null );
- dockWidget->setPixmap( *( it.data()->wrappedWidget()->icon() ) );
- break;
- case KMdi::TextOnly:
- dockWidget->setPixmap(); //FIXME: Does not hide the icon in the IDEAl mode.
- dockWidget->setTabPageLabel( it.data()->wrappedWidget()->caption() );
- break;
- case KMdi::TextAndIcon:
- dockWidget->setPixmap( *( it.data()->wrappedWidget()->icon() ) );
- dockWidget->setTabPageLabel( it.data()->wrappedWidget()->caption() );
- default:
- break;
- }
- toolviewExists = true;
- }
- }
-
- if ( toolviewExists )
- {
- //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.
- if ( m_mdiMode == KMdi::IDEAlMode && flag == KMdi::TextOnly )
- {
- KMdiMainFrm::switchToTabPageMode();
- KMdiMainFrm::switchToIDEAlMode();
- }
- else
- {
- writeDockConfig();
- readDockConfig();
- }
- }
-}
-
-/**
- * Docks all view windows (Windows-like)
- */
-void KMdiMainFrm::switchToIDEAlMode()
-{
- kdDebug(760) << k_funcinfo << "switching to IDEAl mode" << endl;
-
- if ( m_mdiMode == KMdi::IDEAlMode )
- {
- emit mdiModeHasBeenChangedTo( KMdi::IDEAlMode );
- return ; // nothing need to be done
- }
-
- switch( m_mdiMode )
- {
- case KMdi::ChildframeMode:
- finishChildframeMode();
- break;
- case KMdi::ToplevelMode:
- finishToplevelMode();
- break;
- case KMdi::TabPageMode:
- m_mdiMode = KMdi::IDEAlMode;
- setupToolViewsForIDEALMode();
- emit mdiModeHasBeenChangedTo( KMdi::IDEAlMode );
- return;
- break;
- default:
- break;
- }
-
- setupTabbedDocumentViewSpace();
- m_mdiMode = KMdi::IDEAlMode;
- setupToolViewsForIDEALMode();
-
- if ( m_pCurrentWindow )
- m_pCurrentWindow->setFocus();
-
- m_pTaskBar->switchOn( false );
-
- if ( m_pClose )
- {
- TQObject::connect( m_pClose, TQT_SIGNAL( clicked() ), this, TQT_SLOT( closeViewButtonPressed() ) );
- if ( m_pDocumentViews->count() > 0 )
- m_pClose->show();
- }
- else
- kdWarning(760) << k_funcinfo << "close button pointer does not exist!" << endl;
-
- kdDebug(760) << k_funcinfo << "switch to IDEAl mode complete" << endl;
-
- emit mdiModeHasBeenChangedTo( KMdi::IDEAlMode );
-}
-
-
-void KMdiMainFrm::dockToolViewsIntoContainers( TQPtrList<KDockWidget>& widgetsToReparent, KDockWidget *container )
-{
- TQPtrListIterator<KDockWidget> it( widgetsToReparent );
- for ( ; ( *it ); ++it )
- {
- ( *it )->manualDock( container, KDockWidget::DockCenter, 20 );
- ( *it )->loseFormerBrotherDockWidget();
- }
-}
-
-void KMdiMainFrm::findToolViewsDockedToMain( TQPtrList<KDockWidget>* list, KDockWidget::DockPosition dprtmw )
-{
- KDockWidget* mainDock = getMainDockWidget();
- if ( mainDock->parentDockTabGroup() )
- {
- mainDock = tqt_dynamic_cast<KDockWidget*>( mainDock->parentDockTabGroup()->parent() );
- // FIXME: will likely crash below due to unchecked cast
- }
-
- if ( !mainDock )
- {
- kdDebug(760) << k_funcinfo << "mainDock invalid. No main dock widget found." << endl;
- return;
- }
-
- KDockWidget* widget = mainDock->findNearestDockWidget( dprtmw );
- if ( widget && widget->parentDockTabGroup() )
- {
- widget = static_cast<KDockWidget*>( TQT_TQWIDGET(widget->parentDockTabGroup() ->parent()) );
-
- if ( widget )
- {
- KDockTabGroup* tg = tqt_dynamic_cast<KDockTabGroup*>( widget->getWidget() );
- if ( tg )
- {
- kdDebug(760) << k_funcinfo << "KDockTabGroup found" << endl;
- for ( int i = 0;i < tg->count();i++ )
- list->append( static_cast<KDockWidget*>( tg->page( i ) ) );
- }
- else
- list->append( widget );
- }
- else
- kdDebug(760) << k_funcinfo << "no widget found" << endl;
- }
- else
- kdDebug(760) << "No main dock widget found" << endl;
-}
-
-
-void KMdiMainFrm::setupToolViewsForIDEALMode()
-{
- m_leftContainer = createDockWidget( "KMdiDock::leftDock", SmallIcon( "misc" ), 0L, "Left Dock" );
- m_rightContainer = createDockWidget( "KMdiDock::rightDock", SmallIcon( "misc" ), 0L, "Right Dock" );
- m_topContainer = createDockWidget( "KMdiDock::topDock", SmallIcon( "misc" ), 0L, "Top Dock" );
- m_bottomContainer = createDockWidget( "KMdiDock::bottomDock", SmallIcon( "misc" ), 0L, "Bottom Dock" );
-
- KDockWidget *mainDock = getMainDockWidget();
- KDockWidget *w = mainDock;
- if ( mainDock->parentDockTabGroup() )
- w = static_cast<KDockWidget*>( TQT_TQWIDGET(mainDock->parentDockTabGroup()->parent()) );
-
- TQPtrList<KDockWidget> leftReparentWidgets;
- TQPtrList<KDockWidget> rightReparentWidgets;
- TQPtrList<KDockWidget> bottomReparentWidgets;
- TQPtrList<KDockWidget> topReparentWidgets;
-
- if ( mainDock->parentDockTabGroup() )
- mainDock = static_cast<KDockWidget*>( TQT_TQWIDGET(mainDock->parentDockTabGroup() ->parent()) );
-
- findToolViewsDockedToMain( &leftReparentWidgets, KDockWidget::DockLeft );
- findToolViewsDockedToMain( &rightReparentWidgets, KDockWidget::DockRight );
- findToolViewsDockedToMain( &bottomReparentWidgets, KDockWidget::DockBottom );
- findToolViewsDockedToMain( &topReparentWidgets, KDockWidget::DockTop );
-
- mainDock->setEnableDocking( KDockWidget::DockNone ); //::DockCorner);
- mainDock->setDockSite( KDockWidget::DockCorner );
-
-
- KMdiDockContainer *tmpDC;
- m_leftContainer->setWidget( tmpDC = new KMdiDockContainer( m_leftContainer, this, KDockWidget::DockLeft, d->m_styleIDEAlMode ) );
- m_leftContainer->setEnableDocking( KDockWidget::DockLeft );
- m_leftContainer->manualDock( mainDock, KDockWidget::DockLeft, 20 );
- tmpDC->init();
- if ( m_mdiGUIClient )
- connect ( this, TQT_SIGNAL( toggleLeft() ), tmpDC, TQT_SLOT( toggle() ) );
- connect( this, TQT_SIGNAL( collapseOverlapContainers() ), tmpDC, TQT_SLOT( collapseOverlapped() ) );
- connect( tmpDC, TQT_SIGNAL( activated( KMdiDockContainer* ) ), this, TQT_SLOT( setActiveToolDock( KMdiDockContainer* ) ) );
- connect( tmpDC, TQT_SIGNAL( deactivated( KMdiDockContainer* ) ), this, TQT_SLOT( removeFromActiveDockList( KMdiDockContainer* ) ) );
-
- m_rightContainer->setWidget( tmpDC = new KMdiDockContainer( m_rightContainer, this, KDockWidget::DockRight, d->m_styleIDEAlMode ) );
- m_rightContainer->setEnableDocking( KDockWidget::DockRight );
- m_rightContainer->manualDock( mainDock, KDockWidget::DockRight, 80 );
- tmpDC->init();
- if ( m_mdiGUIClient )
- connect ( this, TQT_SIGNAL( toggleRight() ), tmpDC, TQT_SLOT( toggle() ) );
- connect( this, TQT_SIGNAL( collapseOverlapContainers() ), tmpDC, TQT_SLOT( collapseOverlapped() ) );
- connect( tmpDC, TQT_SIGNAL( activated( KMdiDockContainer* ) ), this, TQT_SLOT( setActiveToolDock( KMdiDockContainer* ) ) );
- connect( tmpDC, TQT_SIGNAL( deactivated( KMdiDockContainer* ) ), this, TQT_SLOT( removeFromActiveDockList( KMdiDockContainer* ) ) );
-
- m_topContainer->setWidget( tmpDC = new KMdiDockContainer( m_topContainer, this, KDockWidget::DockTop, d->m_styleIDEAlMode ) );
- m_topContainer->setEnableDocking( KDockWidget::DockTop );
- m_topContainer->manualDock( mainDock, KDockWidget::DockTop, 20 );
- tmpDC->init();
- if ( m_mdiGUIClient )
- connect ( this, TQT_SIGNAL( toggleTop() ), tmpDC, TQT_SLOT( toggle() ) );
- connect( this, TQT_SIGNAL( collapseOverlapContainers() ), tmpDC, TQT_SLOT( collapseOverlapped() ) );
- connect( tmpDC, TQT_SIGNAL( activated( KMdiDockContainer* ) ), this, TQT_SLOT( setActiveToolDock( KMdiDockContainer* ) ) );
- connect( tmpDC, TQT_SIGNAL( deactivated( KMdiDockContainer* ) ), this, TQT_SLOT( removeFromActiveDockList( KMdiDockContainer* ) ) );
-
- m_bottomContainer->setWidget( tmpDC = new KMdiDockContainer( m_bottomContainer, this, KDockWidget::DockBottom, d->m_styleIDEAlMode ) );
- m_bottomContainer->setEnableDocking( KDockWidget::DockBottom );
- m_bottomContainer->manualDock( mainDock, KDockWidget::DockBottom, 80 );
- tmpDC->init();
- if ( m_mdiGUIClient )
- connect ( this, TQT_SIGNAL( toggleBottom() ), tmpDC, TQT_SLOT( toggle() ) );
- connect( this, TQT_SIGNAL( collapseOverlapContainers() ), tmpDC, TQT_SLOT( collapseOverlapped() ) );
- connect( tmpDC, TQT_SIGNAL( activated( KMdiDockContainer* ) ), this, TQT_SLOT( setActiveToolDock( KMdiDockContainer* ) ) );
- connect( tmpDC, TQT_SIGNAL( deactivated( KMdiDockContainer* ) ), this, TQT_SLOT( removeFromActiveDockList( KMdiDockContainer* ) ) );
-
- m_leftContainer->setDockSite( KDockWidget::DockCenter );
- m_rightContainer->setDockSite( KDockWidget::DockCenter );
- m_topContainer->setDockSite( KDockWidget::DockCenter );
- m_bottomContainer->setDockSite( KDockWidget::DockCenter );
-
- dockToolViewsIntoContainers( leftReparentWidgets, m_leftContainer );
- dockToolViewsIntoContainers( rightReparentWidgets, m_rightContainer );
- dockToolViewsIntoContainers( bottomReparentWidgets, m_bottomContainer );
- dockToolViewsIntoContainers( topReparentWidgets, m_topContainer );
-
-
- dockManager->setSpecialLeftDockContainer( m_leftContainer );
- dockManager->setSpecialRightDockContainer( m_rightContainer );
- dockManager->setSpecialTopDockContainer( m_topContainer );
- dockManager->setSpecialBottomDockContainer( m_bottomContainer );
-
-
- ( ( KMdiDockContainer* ) ( m_leftContainer->getWidget() ) ) ->hideIfNeeded();
- ( ( KMdiDockContainer* ) ( m_rightContainer->getWidget() ) ) ->hideIfNeeded();
- ( ( KMdiDockContainer* ) ( m_topContainer->getWidget() ) ) ->hideIfNeeded();
- ( ( KMdiDockContainer* ) ( m_bottomContainer->getWidget() ) ) ->hideIfNeeded();
-
-}
-
-
-
-void KMdiMainFrm::finishIDEAlMode( bool full )
-{
- // if tabified, release all views from their docking covers
- if ( m_mdiMode == KMdi::IDEAlMode )
- {
- assert( m_pClose );
- m_pClose->hide();
- TQObject::disconnect( m_pClose, TQT_SIGNAL( clicked() ), this, TQT_SLOT( closeViewButtonPressed() ) );
-
-
- TQStringList leftNames;
- leftNames = prepareIdealToTabs( m_leftContainer );
- int leftWidth = m_leftContainer->width();
-
- TQStringList rightNames;
- rightNames = prepareIdealToTabs( m_rightContainer );
- int rightWidth = m_rightContainer->width();
-
- TQStringList topNames;
- topNames = prepareIdealToTabs( m_topContainer );
- int topHeight = m_topContainer->height();
-
- TQStringList bottomNames;
- bottomNames = prepareIdealToTabs( m_bottomContainer );
- int bottomHeight = m_bottomContainer->height();
-
-
- kdDebug(760) << "leftNames" << leftNames << endl;
- kdDebug(760) << "rightNames" << rightNames << endl;
- kdDebug(760) << "topNames" << topNames << endl;
- kdDebug(760) << "bottomNames" << bottomNames << endl;
-
- delete m_leftContainer;
- m_leftContainer = 0;
- delete m_rightContainer;
- m_rightContainer = 0;
- delete m_bottomContainer;
- m_bottomContainer = 0;
- delete m_topContainer;
- m_topContainer = 0;
-
-
- idealToolViewsToStandardTabs( bottomNames, KDockWidget::DockBottom, bottomHeight );
- idealToolViewsToStandardTabs( leftNames, KDockWidget::DockLeft, leftWidth );
- idealToolViewsToStandardTabs( rightNames, KDockWidget::DockRight, rightWidth );
- idealToolViewsToStandardTabs( topNames, KDockWidget::DockTop, topHeight );
-
- TQApplication::sendPostedEvents();
-
- if ( !full )
- return ;
-
- TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
- for ( ; it.current(); ++it )
- {
- KMdiChildView* pView = it.current();
- if ( pView->isToolView() )
- continue;
- TQSize mins = pView->minimumSize();
- TQSize maxs = pView->maximumSize();
- TQSize sz = pView->size();
- TQWidget* pParent = pView->parentWidget();
- TQPoint p( pParent->mapToGlobal( pParent->pos() ) - pParent->pos() + m_undockPositioningOffset );
- pView->reparent( 0, 0, p );
- pView->reparent( 0, 0, p );
- pView->resize( sz );
- pView->setMinimumSize( mins.width(), mins.height() );
- pView->setMaximumSize( maxs.width(), maxs.height() );
- KDockWidget* pDockW = 0L;
- // find the oldest ancestor of the current dockwidget that can be undocked
- do
- {
- if ( pParent->inherits( "KDockWidget" ) || pParent->inherits( "KDockWidget_Compat::KDockWidget" ) )
- {
- pDockW = ( KDockWidget* ) pParent;
- pDockW->undock(); // this destroys the dockwiget cover, too
- if ( pParent != m_pDockbaseAreaOfDocumentViews )
- {
- pParent->close();
- delete pParent;
- }
- }
- else
- {
- pParent = pParent->parentWidget();
- }
- }
- while ( pParent && !pDockW );
- if ( centralWidget() == pParent )
- {
- setCentralWidget( 0L ); // avoid dangling pointer
- }
- }
- m_pTaskBar->switchOn( true );
-
- }
-
-}
-
-TQStringList KMdiMainFrm::prepareIdealToTabs( KDockWidget* container )
-{
- KDockContainer * pDW = tqt_dynamic_cast<KDockContainer*>( container->getWidget() );
- TQStringList widgetNames = ( ( KMdiDockContainer* ) pDW ) ->containedWidgets();
- for ( TQStringList::iterator it = widgetNames.begin();it != widgetNames.end();++it )
- {
- KDockWidget* dw = ( KDockWidget* ) manager() ->getDockWidgetFromName( *it );
- dw->undock();
- dw->setLatestKDockContainer( 0 );
- dw->loseFormerBrotherDockWidget();
- }
- return widgetNames;
-}
-
-void KMdiMainFrm::idealToolViewsToStandardTabs( TQStringList widgetNames, KDockWidget::DockPosition pos, int size )
-{
- Q_UNUSED( size )
-
- KDockWidget * mainDock = getMainDockWidget();
- if ( mainDock->parentDockTabGroup() )
- {
- mainDock = static_cast<KDockWidget*>( TQT_TQWIDGET(mainDock->parentDockTabGroup() ->parent()) );
- }
-
- if ( widgetNames.count() > 0 )
- {
- TQStringList::iterator it = widgetNames.begin();
- KDockWidget *dwpd = manager() ->getDockWidgetFromName( *it );
- if ( !dwpd )
- {
- kdDebug(760) << "Fatal error in finishIDEAlMode" << endl;
- return ;
- }
- dwpd->manualDock( mainDock, pos, 20 );
- ++it;
- for ( ;it != widgetNames.end();++it )
- {
- KDockWidget *tmpdw = manager() ->getDockWidgetFromName( *it );
- if ( !tmpdw )
- {
- kdDebug(760) << "Fatal error in finishIDEAlMode" << endl;
- return ;
- }
- tmpdw->manualDock( dwpd, KDockWidget::DockCenter, 20 );
- }
-
-#if 0
- TQWidget *wid = dwpd->parentDockTabGroup();
- if ( !wid )
- wid = dwpd;
- wid->setGeometry( 0, 0, 20, 20 );
- /* wid->resize(
- ((pos==KDockWidget::DockLeft) || (pos==KDockWidget::DockRight))?size:wid->width(),
- ((pos==KDockWidget::DockLeft) || (pos==KDockWidget::DockRight))?wid->height():size);
- */
-#endif
-
- }
-
-}
-
-
-/**
- * redirect the signal for insertion of buttons to an own slot
- * that means: If the menubar (where the buttons should be inserted) is given,
- * QextMDI can insert them automatically.
- * Otherwise only signals can be emitted to tell the outside that
- * someone must do this job itself.
- */
-void KMdiMainFrm::setMenuForSDIModeSysButtons( KMenuBar* pMenuBar )
-{
- if ( m_bSDIApplication ) // there are no buttons in the menubar in this mode (although the view is always maximized)
- return ;
-
- m_pMainMenuBar = pMenuBar;
- if ( m_pMainMenuBar == 0L )
- return ; // use setMenuForSDIModeSysButtons( 0L) for unsetting the external main menu!
-
- if ( !m_pUndock )
- m_pUndock = new TQToolButton( pMenuBar );
- if ( !m_pRestore )
- m_pRestore = new TQToolButton( pMenuBar );
- if ( !m_pMinimize )
- m_pMinimize = new TQToolButton( pMenuBar );
- if ( !m_pClose )
- m_pClose = new TQToolButton( pMenuBar );
- m_pUndock->setAutoRaise( false );
- m_pMinimize->setAutoRaise( false );
- m_pRestore->setAutoRaise( false );
- m_pClose->setAutoRaise( false );
-
- setSysButtonsAtMenuPosition();
-
- delete m_pUndockButtonPixmap;
- delete m_pMinButtonPixmap;
- delete m_pRestoreButtonPixmap;
- delete m_pCloseButtonPixmap;
- // create the decoration pixmaps
- if ( frameDecorOfAttachedViews() == KMdi::Win95Look )
- {
- m_pUndockButtonPixmap = new TQPixmap( win_undockbutton );
- m_pMinButtonPixmap = new TQPixmap( win_minbutton );
- m_pRestoreButtonPixmap = new TQPixmap( win_restorebutton );
- m_pCloseButtonPixmap = new TQPixmap( win_closebutton );
- }
- else if ( frameDecorOfAttachedViews() == KMdi::KDE1Look )
- {
- m_pUndockButtonPixmap = new TQPixmap( kde_undockbutton );
- m_pMinButtonPixmap = new TQPixmap( kde_minbutton );
- m_pRestoreButtonPixmap = new TQPixmap( kde_restorebutton );
- m_pCloseButtonPixmap = new TQPixmap( kde_closebutton );
- m_pUndock->setAutoRaise( true );
- m_pMinimize->setAutoRaise( true );
- m_pRestore->setAutoRaise( true );
- m_pClose->setAutoRaise( true );
- }
- else if ( frameDecorOfAttachedViews() == KMdi::KDELook )
- {
- m_pUndockButtonPixmap = new TQPixmap( kde2_undockbutton );
- m_pMinButtonPixmap = new TQPixmap( kde2_minbutton );
- m_pRestoreButtonPixmap = new TQPixmap( kde2_restorebutton );
- m_pCloseButtonPixmap = new TQPixmap( kde2_closebutton );
- }
- else
- { // kde2laptop look
- m_pUndockButtonPixmap = new TQPixmap( kde2laptop_undockbutton );
- m_pMinButtonPixmap = new TQPixmap( kde2laptop_minbutton );
- m_pRestoreButtonPixmap = new TQPixmap( kde2laptop_restorebutton );
- m_pCloseButtonPixmap = new TQPixmap( kde2laptop_closebutton );
- }
-
- m_pUndock->hide();
- m_pMinimize->hide();
- m_pRestore->hide();
- m_pClose->hide();
-
- m_pUndock->setPixmap( *m_pUndockButtonPixmap );
- m_pMinimize->setPixmap( *m_pMinButtonPixmap );
- m_pRestore->setPixmap( *m_pRestoreButtonPixmap );
- m_pClose->setPixmap( *m_pCloseButtonPixmap );
-}
-
-void KMdiMainFrm::setSysButtonsAtMenuPosition()
-{
- if ( m_pMainMenuBar == 0L )
- return ;
- if ( m_pMainMenuBar->parentWidget() == 0L )
- return ;
-
- int menuW = m_pMainMenuBar->parentWidget() ->width();
- int h;
- int y;
- if ( frameDecorOfAttachedViews() == KMdi::Win95Look )
- h = 16;
- else if ( frameDecorOfAttachedViews() == KMdi::KDE1Look )
- h = 20;
- else if ( frameDecorOfAttachedViews() == KMdi::KDELook )
- h = 16;
- else
- h = 14;
- y = m_pMainMenuBar->height() / 2 - h / 2;
-
- if ( frameDecorOfAttachedViews() == KMdi::KDELaptopLook )
- {
- int w = 27;
- m_pUndock->setGeometry( ( menuW - ( w * 3 ) - 5 ), y, w, h );
- m_pMinimize->setGeometry( ( menuW - ( w * 2 ) - 5 ), y, w, h );
- m_pRestore->setGeometry( ( menuW - w - 5 ), y, w, h );
- }
- else
- {
- m_pUndock->setGeometry( ( menuW - ( h * 4 ) - 5 ), y, h, h );
- m_pMinimize->setGeometry( ( menuW - ( h * 3 ) - 5 ), y, h, h );
- m_pRestore->setGeometry( ( menuW - ( h * 2 ) - 5 ), y, h, h );
- m_pClose->setGeometry( ( menuW - h - 5 ), y, h, h );
- }
-}
-
-/** Activates the next open view */
-void KMdiMainFrm::activateNextWin()
-{
- KMdiIterator<KMdiChildView*>* it = createIterator();
- KMdiChildView* aWin = activeWindow();
- for ( it->first(); !it->isDone(); it->next() )
- {
- if ( it->currentItem() == aWin )
- {
- it->next();
- if ( !it->currentItem() )
- {
- it->first();
- }
- if ( it->currentItem() )
- {
- activateView( it->currentItem() );
- }
- break;
- }
- }
- delete it;
-}
-
-/** Activates the previous open view */
-void KMdiMainFrm::activatePrevWin()
-{
- KMdiIterator<KMdiChildView*>* it = createIterator();
- KMdiChildView* aWin = activeWindow();
- for ( it->first(); !it->isDone(); it->next() )
- {
- if ( it->currentItem() == aWin )
- {
- it->prev();
- if ( !it->currentItem() )
- {
- it->last();
- }
- if ( it->currentItem() )
- {
- activateView( it->currentItem() );
- }
- break;
- }
- }
- delete it;
-}
-
-/** Activates the view we accessed the most time ago */
-void KMdiMainFrm::activateFirstWin()
-{
- m_bSwitching= true; // flag that we are currently switching between windows
- KMdiIterator<KMdiChildView*>* it = createIterator();
- TQMap<TQDateTime, KMdiChildView*> m;
- for ( it->first(); !it->isDone(); it->next() )
- {
- m.insert( it->currentItem() ->getTimeStamp(), it->currentItem() );
- }
-
- if ( !activeWindow() )
- return ;
-
- TQDateTime current = activeWindow() ->getTimeStamp();
- TQMap<TQDateTime, KMdiChildView*>::iterator pos( m.find( current ) );
- TQMap<TQDateTime, KMdiChildView*>::iterator newPos = pos;
- if ( pos != m.end() )
- {
- ++newPos;
- }
- if ( newPos != m.end() )
- { // look ahead
- ++pos;
- }
- else
- {
- pos = m.begin();
- }
- activateView( pos.data() );
- delete it;
-}
-
-/** Activates the previously accessed view before this one was activated */
-void KMdiMainFrm::activateLastWin()
-{
- m_bSwitching= true; // flag that we are currently switching between windows
- KMdiIterator<KMdiChildView*>* it = createIterator();
- TQMap<TQDateTime, KMdiChildView*> m;
- for ( it->first(); !it->isDone(); it->next() )
- {
- m.insert( it->currentItem() ->getTimeStamp(), it->currentItem() );
- }
-
- if ( !activeWindow() )
- return ;
-
- TQDateTime current = activeWindow() ->getTimeStamp();
- TQMap<TQDateTime, KMdiChildView*>::iterator pos( m.find( current ) );
- if ( pos != m.begin() )
- {
- --pos;
- }
- else
- {
- pos = m.end();
- --pos;
- }
- activateView( pos.data() );
- delete it;
-}
-
-/** Activates the view with a certain index (TabPage mode only) */
-void KMdiMainFrm::activateView( int index )
-{
- KMdiChildView * pView = m_pDocumentViews->first();
- for ( int i = 0; pView && ( i < index ); i++ )
- {
- pView = m_pDocumentViews->next();
- }
- if ( pView )
- {
- pView->activate();
- }
-}
-
-/** turns the system buttons for maximize mode (SDI mode) on, and connects them with the current child frame */
-void KMdiMainFrm::setEnableMaximizedChildFrmMode( bool enableMaxChildFrameMode )
-{
- if ( enableMaxChildFrameMode )
- {
- kdDebug(760) << k_funcinfo << "Turning on maximized child frame mode" << endl;
- m_bMaximizedChildFrmMode = true;
-
- KMdiChildFrm* pCurrentChild = m_pMdi->topChild();
-
- //If we have no child or there is no menubar, we do nothing
- if ( !pCurrentChild || !m_pMainMenuBar )
- return ;
-
- TQObject::connect( m_pUndock, TQT_SIGNAL( clicked() ), pCurrentChild, TQT_SLOT( undockPressed() ) );
- TQObject::connect( m_pMinimize, TQT_SIGNAL( clicked() ), pCurrentChild, TQT_SLOT( minimizePressed() ) );
- TQObject::connect( m_pRestore, TQT_SIGNAL( clicked() ), pCurrentChild, TQT_SLOT( maximizePressed() ) );
- m_pMinimize->show();
- m_pUndock->show();
- m_pRestore->show();
-
- if ( frameDecorOfAttachedViews() == KMdi::KDELaptopLook )
- {
- m_pMainMenuBar->insertItem( TQPixmap( kde2laptop_closebutton_menu ), m_pMdi->topChild(), TQT_SLOT( closePressed() ), 0, -1, 0 );
- }
- else
- {
- m_pMainMenuBar->insertItem( *pCurrentChild->icon(), pCurrentChild->systemMenu(), -1, 0 );
- if ( m_pClose )
- {
- TQObject::connect( m_pClose, TQT_SIGNAL( clicked() ), pCurrentChild, TQT_SLOT( closePressed() ) );
- m_pClose->show();
- }
- else
- kdDebug(760) << k_funcinfo << "no close button. things won't behave correctly" << endl;
- }
- }
- else
- {
- if ( !m_bMaximizedChildFrmMode )
- return ; // already set, nothing to do
-
- kdDebug(760) << k_funcinfo << "Turning off maximized child frame mode" << endl;
- m_bMaximizedChildFrmMode = false;
-
- KMdiChildFrm* pFrmChild = m_pMdi->topChild();
- if ( pFrmChild && pFrmChild->m_pClient && pFrmChild->state() == KMdiChildFrm::Maximized )
- {
- pFrmChild->m_pClient->restore();
- switchOffMaximizeModeForMenu( pFrmChild );
- }
- }
-}
-
-/** turns the system buttons for maximize mode (SDI mode) off, and disconnects them */
-void KMdiMainFrm::switchOffMaximizeModeForMenu( KMdiChildFrm* oldChild )
-{
- // if there is no menubar given, those system buttons aren't possible
- if ( !m_pMainMenuBar )
- return ;
-
- m_pMainMenuBar->removeItem( m_pMainMenuBar->idAt( 0 ) );
-
- if ( oldChild )
- {
- Q_ASSERT( m_pClose );
- TQObject::disconnect( m_pUndock, TQT_SIGNAL( clicked() ), oldChild, TQT_SLOT( undockPressed() ) );
- TQObject::disconnect( m_pMinimize, TQT_SIGNAL( clicked() ), oldChild, TQT_SLOT( minimizePressed() ) );
- TQObject::disconnect( m_pRestore, TQT_SIGNAL( clicked() ), oldChild, TQT_SLOT( maximizePressed() ) );
- TQObject::disconnect( m_pClose, TQT_SIGNAL( clicked() ), oldChild, TQT_SLOT( closePressed() ) );
- }
- m_pUndock->hide();
- m_pMinimize->hide();
- m_pRestore->hide();
- m_pClose->hide();
-}
-
-/** reconnects the system buttons form maximize mode (SDI mode) with the new child frame */
-void KMdiMainFrm::updateSysButtonConnections( KMdiChildFrm* oldChild, KMdiChildFrm* newChild )
-{
- //tqDebug("updateSysButtonConnections");
- // if there is no menubar given, those system buttons aren't possible
- if ( !m_pMainMenuBar )
- return ;
-
- if ( newChild )
- {
- if ( frameDecorOfAttachedViews() == KMdi::KDELaptopLook )
- m_pMainMenuBar->insertItem( TQPixmap( kde2laptop_closebutton_menu ), newChild, TQT_SLOT( closePressed() ), 0, -1, 0 );
- else
- m_pMainMenuBar->insertItem( *newChild->icon(), newChild->systemMenu(), -1, 0 );
- }
-
- if ( oldChild )
- {
- m_pMainMenuBar->removeItem( m_pMainMenuBar->idAt( 1 ) );
- Q_ASSERT( m_pClose );
- TQObject::disconnect( m_pUndock, TQT_SIGNAL( clicked() ), oldChild, TQT_SLOT( undockPressed() ) );
- TQObject::disconnect( m_pMinimize, TQT_SIGNAL( clicked() ), oldChild, TQT_SLOT( minimizePressed() ) );
- TQObject::disconnect( m_pRestore, TQT_SIGNAL( clicked() ), oldChild, TQT_SLOT( maximizePressed() ) );
- TQObject::disconnect( m_pClose, TQT_SIGNAL( clicked() ), oldChild, TQT_SLOT( closePressed() ) );
- }
- if ( newChild )
- {
- Q_ASSERT( m_pClose );
- TQObject::connect( m_pUndock, TQT_SIGNAL( clicked() ), newChild, TQT_SLOT( undockPressed() ) );
- TQObject::connect( m_pMinimize, TQT_SIGNAL( clicked() ), newChild, TQT_SLOT( minimizePressed() ) );
- TQObject::connect( m_pRestore, TQT_SIGNAL( clicked() ), newChild, TQT_SLOT( maximizePressed() ) );
- TQObject::connect( m_pClose, TQT_SIGNAL( clicked() ), newChild, TQT_SLOT( closePressed() ) );
- }
-}
-
-/** Shows the view taskbar. This should be connected with your "View" menu. */
-bool KMdiMainFrm::isViewTaskBarOn()
-{
- if ( m_pTaskBar )
- return m_pTaskBar->isSwitchedOn();
- else
- return false;
-}
-
-/** Shows the view taskbar. This should be connected with your "View" menu. */
-void KMdiMainFrm::showViewTaskBar()
-{
- if ( m_pTaskBar )
- m_pTaskBar->switchOn( true );
-}
-
-/** Hides the view taskbar. This should be connected with your "View" menu. */
-void KMdiMainFrm::hideViewTaskBar()
-{
- if ( m_pTaskBar )
- m_pTaskBar->switchOn( false );
-}
-
-//=============== fillWindowMenu ===============//
-void KMdiMainFrm::fillWindowMenu()
-{
- bool tabPageMode = false;
- if ( m_mdiMode == KMdi::TabPageMode )
- tabPageMode = true;
-
- bool IDEAlMode = false;
- if ( m_mdiMode == KMdi::IDEAlMode )
- IDEAlMode = true;
-
- bool noViewOpened = false;
- if ( m_pDocumentViews->isEmpty() )
- noViewOpened = true;
-
- // construct the menu and its submenus
- if ( !m_bClearingOfWindowMenuBlocked )
- m_pWindowMenu->clear();
-
- d->closeWindowAction->plug(m_pWindowMenu);
-
- int closeAllId = m_pWindowMenu->insertItem( i18n( "Close &All" ), this, TQT_SLOT( closeAllViews() ) );
- if ( noViewOpened )
- {
- d->closeWindowAction->setEnabled(false);
- m_pWindowMenu->setItemEnabled( closeAllId, false );
- }
-
- if ( !tabPageMode && !IDEAlMode )
- {
- int iconifyId = m_pWindowMenu->insertItem( i18n( "&Minimize All" ), this, TQT_SLOT( iconifyAllViews() ) );
- if ( noViewOpened )
- m_pWindowMenu->setItemEnabled( iconifyId, false );
- }
-
- m_pWindowMenu->insertSeparator();
- m_pWindowMenu->insertItem( i18n( "&MDI Mode" ), m_pMdiModeMenu );
- m_pMdiModeMenu->clear();
- m_pMdiModeMenu->insertItem( i18n( "&Toplevel Mode" ), this, TQT_SLOT( switchToToplevelMode() ) );
- m_pMdiModeMenu->insertItem( i18n( "C&hildframe Mode" ), this, TQT_SLOT( switchToChildframeMode() ) );
- m_pMdiModeMenu->insertItem( i18n( "Ta&b Page Mode" ), this, TQT_SLOT( switchToTabPageMode() ) );
- m_pMdiModeMenu->insertItem( i18n( "I&DEAl Mode" ), this, TQT_SLOT( switchToIDEAlMode() ) );
- switch ( m_mdiMode )
- {
- case KMdi::ToplevelMode:
- m_pMdiModeMenu->setItemChecked( m_pMdiModeMenu->idAt( 0 ), true );
- break;
- case KMdi::ChildframeMode:
- m_pMdiModeMenu->setItemChecked( m_pMdiModeMenu->idAt( 1 ), true );
- break;
- case KMdi::TabPageMode:
- m_pMdiModeMenu->setItemChecked( m_pMdiModeMenu->idAt( 2 ), true );
- break;
- case KMdi::IDEAlMode:
- m_pMdiModeMenu->setItemChecked( m_pMdiModeMenu->idAt( 3 ), true );
- break;
- default:
- break;
- }
-
- m_pWindowMenu->insertSeparator();
- if ( !tabPageMode && !IDEAlMode )
- {
- int placMenuId = m_pWindowMenu->insertItem( i18n( "&Tile" ), m_pPlacingMenu );
- m_pPlacingMenu->clear();
- m_pPlacingMenu->insertItem( i18n( "Ca&scade Windows" ), m_pMdi, TQT_SLOT( cascadeWindows() ) );
- m_pPlacingMenu->insertItem( i18n( "Cascade &Maximized" ), m_pMdi, TQT_SLOT( cascadeMaximized() ) );
- m_pPlacingMenu->insertItem( i18n( "Expand &Vertically" ), m_pMdi, TQT_SLOT( expandVertical() ) );
- m_pPlacingMenu->insertItem( i18n( "Expand &Horizontally" ), m_pMdi, TQT_SLOT( expandHorizontal() ) );
- m_pPlacingMenu->insertItem( i18n( "Tile &Non-Overlapped" ), m_pMdi, TQT_SLOT( tileAnodine() ) );
- m_pPlacingMenu->insertItem( i18n( "Tile Overla&pped" ), m_pMdi, TQT_SLOT( tilePragma() ) );
- m_pPlacingMenu->insertItem( i18n( "Tile V&ertically" ), m_pMdi, TQT_SLOT( tileVertically() ) );
- if ( m_mdiMode == KMdi::ToplevelMode )
- {
- m_pWindowMenu->setItemEnabled( placMenuId, false );
- }
- m_pWindowMenu->insertSeparator();
- int dockUndockId = m_pWindowMenu->insertItem( i18n( "&Dock/Undock" ), m_pDockMenu );
- m_pDockMenu->clear();
- m_pWindowMenu->insertSeparator();
- if ( noViewOpened )
- {
- m_pWindowMenu->setItemEnabled( placMenuId, false );
- m_pWindowMenu->setItemEnabled( dockUndockId, false );
- }
- }
- int entryCount = m_pWindowMenu->count();
-
- // for all child frame windows: give an ID to every window and connect them in the end with windowMenuItemActivated()
- int i = 100;
- KMdiChildView* pView = 0L;
- TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
- TQValueList<TQDateTime> timeStamps;
- for ( ; it.current(); ++it )
- {
- pView = it.current();
- TQDateTime timeStamp( pView->getTimeStamp() );
-
- if ( pView->isToolView() )
- {
- continue;
- }
-
- TQString item;
- // set titles of minimized windows in brackets
- if ( pView->isMinimized() )
- {
- item += "(";
- item += pView->caption();
- item += ")";
- }
- else
- {
- item += " ";
- item += pView->caption();
- }
-
- // insert the window entry sorted by access time
- unsigned int indx;
- unsigned int windowItemCount = m_pWindowMenu->count() - entryCount;
- bool inserted = false;
- TQString tmpString;
- TQValueList<TQDateTime>::iterator timeStampIterator = timeStamps.begin();
- for ( indx = 0; indx <= windowItemCount; indx++, ++timeStampIterator )
- {
- bool putHere = false;
- if ( ( *timeStampIterator ) < timeStamp )
- {
- putHere = true;
- timeStamps.insert( timeStampIterator, timeStamp );
- }
- if ( putHere )
- {
- m_pWindowMenu->insertItem( item, pView, TQT_SLOT( slot_clickedInWindowMenu() ), 0, -1, indx + entryCount );
- if ( pView == m_pCurrentWindow )
- {
- m_pWindowMenu->setItemChecked( m_pWindowMenu->idAt( indx + entryCount ), true );
- }
- pView->setWindowMenuID( i );
- if ( !tabPageMode )
- {
- m_pDockMenu->insertItem( item, pView, TQT_SLOT( slot_clickedInDockMenu() ), 0, -1, indx );
- if ( pView->isAttached() )
- {
- m_pDockMenu->setItemChecked( m_pDockMenu->idAt( indx ), true );
- }
- }
- inserted = true;
- break;
- indx = windowItemCount + 1; // break the loop
- }
- }
- if ( !inserted )
- { // append it
- m_pWindowMenu->insertItem( item, pView, TQT_SLOT( slot_clickedInWindowMenu() ), 0, -1, windowItemCount + entryCount );
- if ( pView == m_pCurrentWindow )
- {
- m_pWindowMenu->setItemChecked( m_pWindowMenu->idAt( windowItemCount + entryCount ), true );
- }
- pView->setWindowMenuID( i );
- if ( !tabPageMode )
- {
- m_pDockMenu->insertItem( item, pView, TQT_SLOT( slot_clickedInDockMenu() ), 0, -1, windowItemCount );
- if ( pView->isAttached() )
- {
- m_pDockMenu->setItemChecked( m_pDockMenu->idAt( windowItemCount ), true );
- }
- }
- }
- i++;
- }
-}
-
-//================ windowMenuItemActivated ===============//
-
-void KMdiMainFrm::windowMenuItemActivated( int id )
-{
- if ( id < 100 )
- return ;
- id -= 100;
- KMdiChildView *pView = m_pDocumentViews->at( id );
- if ( !pView )
- return ;
- if ( pView->isMinimized() )
- pView->minimize();
- if ( m_mdiMode != KMdi::TabPageMode )
- {
- KMdiChildFrm * pTopChild = m_pMdi->topChild();
- if ( pTopChild )
- {
- if ( ( pView == pTopChild->m_pClient ) && pView->isAttached() )
- {
- return ;
- }
- }
- }
- activateView( pView );
-}
-
-//================ dockMenuItemActivated ===============//
-
-void KMdiMainFrm::dockMenuItemActivated( int id )
-{
- if ( id < 100 )
- return ;
- id -= 100;
- KMdiChildView *pView = m_pDocumentViews->at( id );
- if ( !pView )
- return ;
- if ( pView->isMinimized() )
- pView->minimize();
- if ( pView->isAttached() )
- {
- detachWindow( pView, true );
- }
- else
- { // is detached
- attachWindow( pView, true );
- }
-}
-
-//================ popupWindowMenu ===============//
-
-void KMdiMainFrm::popupWindowMenu( TQPoint p )
-{
- if ( !isFakingSDIApplication() )
- {
- m_pWindowMenu->popup( p );
- }
-}
-
-//================ dragEndTimeOut ===============//
-void KMdiMainFrm::dragEndTimeOut()
-{
- // send drag end to all concerned views.
- KMdiChildView * pView;
- for ( m_pDocumentViews->first(); ( pView = m_pDocumentViews->current() ) != 0L; m_pDocumentViews->next() )
- {
- KMdiChildFrmDragEndEvent dragEndEvent( 0L );
- TQApplication::sendEvent( pView, &dragEndEvent );
- }
-}
-
-//================ setFrameDecorOfAttachedViews ===============//
-
-void KMdiMainFrm::setFrameDecorOfAttachedViews( int frameDecor )
-{
- switch ( frameDecor )
- {
- case 0:
- m_frameDecoration = KMdi::Win95Look;
- break;
- case 1:
- m_frameDecoration = KMdi::KDE1Look;
- break;
- case 2:
- m_frameDecoration = KMdi::KDELook;
- break;
- case 3:
- m_frameDecoration = KMdi::KDELaptopLook;
- break;
- default:
- tqDebug( "unknown MDI decoration" );
- break;
- }
- setMenuForSDIModeSysButtons( m_pMainMenuBar );
- TQPtrListIterator<KMdiChildView> it( *m_pDocumentViews );
- for ( ; it.current(); ++it )
- {
- KMdiChildView* pView = it.current();
- if ( pView->isToolView() )
- continue;
- if ( pView->isAttached() )
- pView->mdiParent() ->redecorateButtons();
- }
-}
-
-void KMdiMainFrm::fakeSDIApplication()
-{
- m_bSDIApplication = true;
- if ( m_pTaskBar )
- m_pTaskBar->close();
- m_pTaskBar = 0L;
-}
-
-void KMdiMainFrm::closeViewButtonPressed()
-{
- KMdiChildView * pView = activeWindow();
- if ( pView )
- {
- pView->close();
- }
-}
-
-void KMdiMainFrm::setManagedDockPositionModeEnabled( bool enabled )
-{
- m_managedDockPositionMode = enabled;
-}
-
-void KMdiMainFrm::setActiveToolDock( KMdiDockContainer* td )
-{
- if ( td == d->activeDockPriority[ 0 ] )
- return ;
- if ( d->activeDockPriority[ 0 ] == 0 )
- {
- d->activeDockPriority[ 0 ] = td;
- // d->focusList=new KMdiFocusList(this);
- // if (m_pMdi) d->focusList->addWidgetTree(m_pMdi);
- // if (m_documentTabWidget) d->focusList->addWidgetTree(m_documentTabWidget);
- return ;
- }
- for ( int dst = 3, src = 2;src >= 0;dst--, src-- )
- {
- if ( d->activeDockPriority[ src ] == td )
- src--;
- if ( src < 0 )
- break;
- d->activeDockPriority[ dst ] = d->activeDockPriority[ src ];
- }
- d->activeDockPriority[ 0 ] = td;
-}
-
-void KMdiMainFrm::removeFromActiveDockList( KMdiDockContainer* td )
-{
- for ( int i = 0;i < 4;i++ )
- {
- if ( d->activeDockPriority[ i ] == td )
- {
- for ( ;i < 3;i++ )
- d->activeDockPriority[ i ] = d->activeDockPriority[ i + 1 ];
- d->activeDockPriority[ 3 ] = 0;
- break;
- }
- }
- /*
- if (d->activeDockPriority[0]==0) {
- if (d->focusList) d->focusList->restore();
- delete d->focusList;
- d->focusList=0;
- }
- */
-}
-
-void KMdiMainFrm::prevToolViewInDock()
-{
- KMdiDockContainer * td = d->activeDockPriority[ 0 ];
- if ( !td )
- return ;
- td->prevToolView();
-}
-
-void KMdiMainFrm::nextToolViewInDock()
-{
- KMdiDockContainer * td = d->activeDockPriority[ 0 ];
- if ( !td )
- return ;
- td->nextToolView();
-}
-
-KMdi::TabWidgetVisibility KMdiMainFrm::tabWidgetVisibility()
-{
- if ( m_documentTabWidget )
- return m_documentTabWidget->tabWidgetVisibility();
-
- return KMdi::NeverShowTabs;
-}
-
-void KMdiMainFrm::setTabWidgetVisibility( KMdi::TabWidgetVisibility visibility )
-{
- if ( m_documentTabWidget )
- m_documentTabWidget->setTabWidgetVisibility( visibility );
-}
-
-KTabWidget * KMdiMainFrm::tabWidget() const
-{
- return m_documentTabWidget;
-}
-
-#include "kmdimainfrm.moc"
-
-// vim: ts=2 sw=2 et
-// kate: space-indent off; tab-width 4; replace-tabs off; indent-mode csands;