00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
#ifndef _KMDIMAINFRM_H_
00032
#define _KMDIMAINFRM_H_
00033
00034
#include <kparts/dockmainwindow.h>
00035
#include <kmenubar.h>
00036
#include <kpopupmenu.h>
00037
00038
#include <qptrlist.h>
00039
#include <qrect.h>
00040
#include <qapplication.h>
00041
#include <qdom.h>
00042
#include <qguardedptr.h>
00043
00044
#include "kmditaskbar.h"
00045
#include "kmdichildarea.h"
00046
#include "kmdichildview.h"
00047
#include "kmdiiterator.h"
00048
#include "kmdilistiterator.h"
00049
#include "kmdinulliterator.h"
00050
#include "kmditoolviewaccessor.h"
00051
00052
class QTimer;
00053
class QPopupMenu;
00054
class QMenuBar;
00055
00056
00057
class QToolButton;
00058
00059
namespace KMDIPrivate
00060 {
00061
class KMDIGUIClient;
00062 }
00063
00064
class KMdiDockContainer;
00065
class KMdiMainFrmPrivate;
00066
00072 class KMDI_EXPORT KMdiViewCloseEvent :
public QCustomEvent
00073 {
00074
public:
00075 KMdiViewCloseEvent(
KMdiChildView* pWnd ) :
QCustomEvent( QEvent::User, pWnd ) {}
00076 };
00077
00239 class KMDI_EXPORT KMdiMainFrm :
public KParts::DockMainWindow
00240 {
00241
friend class KMdiChildView;
00242
friend class KMdiTaskBar;
00243 Q_OBJECT
00244
00245
friend class KMdiToolViewAccessor;
00246
00247
protected:
00248 KMdi::MdiMode m_mdiMode;
00249
KMdiChildArea *m_pMdi;
00250
KMdiTaskBar *m_pTaskBar;
00251
QPtrList<KMdiChildView> *m_pDocumentViews;
00252
QMap<QWidget*, KMdiToolViewAccessor*> *m_pToolViews;
00253
KMdiChildView *m_pCurrentWindow;
00254
QPopupMenu *m_pWindowPopup;
00255
QPopupMenu *m_pTaskBarPopup;
00256
QPopupMenu *m_pWindowMenu;
00257
QPopupMenu *m_pDockMenu;
00258
QPopupMenu *m_pMdiModeMenu;
00259
QPopupMenu *m_pPlacingMenu;
00260 KMenuBar *m_pMainMenuBar;
00261
00262
QPixmap *m_pUndockButtonPixmap;
00263
QPixmap *m_pMinButtonPixmap;
00264
QPixmap *m_pRestoreButtonPixmap;
00265
QPixmap *m_pCloseButtonPixmap;
00266
00267
QToolButton *m_pUndock;
00268
QToolButton *m_pMinimize;
00269
QToolButton *m_pRestore;
00270
QToolButton *m_pClose;
00271
QPoint m_undockPositioningOffset;
00272
bool m_bMaximizedChildFrmMode;
00273
int m_oldMainFrmHeight;
00274
int m_oldMainFrmMinHeight;
00275
int m_oldMainFrmMaxHeight;
00276
static KMdi::FrameDecor m_frameDecoration;
00277
bool m_bSDIApplication;
00278 KDockWidget* m_pDockbaseAreaOfDocumentViews;
00279
QDomDocument* m_pTempDockSession;
00280
bool m_bClearingOfWindowMenuBlocked;
00281
00282
QTimer* m_pDragEndTimer;
00283
00284
bool m_bSwitching;
00285
00286 KDockWidget* m_leftContainer;
00287 KDockWidget* m_rightContainer;
00288 KDockWidget* m_topContainer;
00289 KDockWidget* m_bottomContainer;
00290
00291
00292
private:
00293 KMdiMainFrmPrivate* d;
00294
KMDIPrivate::KMDIGUIClient* m_mdiGUIClient;
00295
bool m_managedDockPositionMode;
00296
00297
00298
public:
00299 KMdiMainFrm(
QWidget* parentWidget,
const char* name =
"", KMdi::MdiMode mdiMode = KMdi::ChildframeMode, WFlags flags = WType_TopLevel | WDestructiveClose );
00300
virtual ~KMdiMainFrm();
00301
00306
void setStandardMDIMenuEnabled(
bool showModeMenu =
true );
00307
00308
void setManagedDockPositionModeEnabled(
bool enabled );
00309
00313 bool isInMaximizedChildFrmMode() {
return m_bMaximizedChildFrmMode; }
00314
00318 KMdi::MdiMode mdiMode() {
return m_mdiMode; }
00319
00323
KMdiChildView* activeWindow();
00324
00332
virtual QPopupMenu * taskBarPopup(
KMdiChildView *pWnd,
bool bIncludeWindowPopup =
false );
00333
00338
virtual QPopupMenu * windowPopup(
KMdiChildView *pWnd,
bool bIncludeTaskbarPopup =
true );
00339
00343
virtual void applyOptions();
00344
00348
KMdiChildView * findWindow(
const QString& caption );
00349
00350
enum ExistsAs {DocumentView, ToolView, AnyView};
00354
bool windowExists(
KMdiChildView *pWnd, ExistsAs as );
00355
00368
virtual bool event(
QEvent* e );
00369
00373
virtual void setSysButtonsAtMenuPosition();
00374
00378 virtual int taskBarHeight() {
return m_pTaskBar ? m_pTaskBar->height() : 0; }
00379
00384 virtual void setUndockPositioningOffset(
QPoint offset ) { m_undockPositioningOffset = offset; }
00385
00391
00392 KMdiIterator<KMdiChildView*>* createIterator()
00393 {
00394
if ( m_pDocumentViews == 0L )
00395 {
00396
return new KMdiNullIterator<KMdiChildView*>();
00397 }
00398
else
00399 {
00400
return new KMdiListIterator<KMdiChildView>( *m_pDocumentViews );
00401 }
00402 }
00403
00407 void deleteIterator( KMdiIterator<KMdiChildView*>* pIt )
00408 {
00409
delete pIt;
00410 }
00411
00417 QPopupMenu* windowMenu()
const {
return m_pWindowMenu; };
00418
00422 virtual void setBackgroundColor(
const QColor &c ) { m_pMdi->setBackgroundColor( c ); }
00423
00427 virtual void setBackgroundPixmap(
const QPixmap &pm ) { m_pMdi->setBackgroundPixmap( pm ); }
00428
00433 void setDefaultChildFrmSize(
const QSize& sz ) { m_pMdi->m_defaultChildFrmSize = sz; }
00434
00438 QSize defaultChildFrmSize() {
return m_pMdi->m_defaultChildFrmSize; }
00439
00443
virtual void setMinimumSize(
int minw,
int minh );
00444
00448 int childFrameModeHeight() {
return m_oldMainFrmHeight; };
00455
virtual void setMenuForSDIModeSysButtons( KMenuBar* menuBar = 0 );
00456
00460 static int frameDecorOfAttachedViews() {
return m_frameDecoration; }
00461
00468
void fakeSDIApplication();
00469
00473 bool isFakingSDIApplication()
const {
return m_bSDIApplication; }
00474
00475
virtual bool eventFilter(
QObject *obj,
QEvent *e );
00476
void findRootDockWidgets(
QPtrList<KDockWidget>* pRootDockWidgetList,
QValueList<QRect>* pPositionList );
00477
00479 void setSwitching(
const bool switching ) { m_bSwitching = switching; }
00480
bool switching(
void )
const {
return m_bSwitching; }
00481
00482
public slots:
00487
KMdiChildView* createWrapper(
QWidget *view,
const QString& name,
const QString& shortName );
00488
00497
virtual void addWindow(
KMdiChildView* pView,
int flags = KMdi::StandardAdd );
00498
00499
00512
void addWindow(
KMdiChildView* pView,
int flags,
int index );
00513
00524
virtual void addWindow(
KMdiChildView* pView,
QPoint pos,
int flags = KMdi::StandardAdd );
00525
00536
virtual void addWindow(
KMdiChildView* pView,
QRect rectNormal,
int flags = KMdi::StandardAdd );
00537
00542
virtual KMdiToolViewAccessor *addToolWindow(
QWidget* pWnd, KDockWidget::DockPosition pos = KDockWidget::DockNone,
00543
QWidget* pTargetWnd = 0L,
int percent = 50,
const QString& tabToolTip = 0,
00544
const QString& tabCaption = 0 );
00545
00546
virtual void deleteToolWindow(
QWidget* pWnd );
00547
virtual void deleteToolWindow( KMdiToolViewAccessor *accessor );
00548
00553 KMdiToolViewAccessor *createToolWindow();
00554
00560
virtual void removeWindowFromMdi(
KMdiChildView *pWnd );
00561
00566
virtual void closeWindow(
KMdiChildView *pWnd,
bool layoutTaskBar =
true );
00567
00571
virtual void slot_toggleTaskBar();
00572
00578
virtual void attachWindow(
KMdiChildView *pWnd,
bool bShow =
true,
bool bAutomaticResize =
false );
00579
00584
virtual void detachWindow(
KMdiChildView *pWnd,
bool bShow =
true );
00585
00590
virtual void childWindowCloseRequest(
KMdiChildView *pWnd );
00591
00595
virtual void closeAllViews();
00596
00600
virtual void iconifyAllViews();
00601
00605
virtual void closeActiveView();
00606
00610
virtual void switchToToplevelMode();
00611
virtual void finishToplevelMode();
00612
00616
virtual void switchToChildframeMode();
00617
virtual void finishChildframeMode();
00618
00622
virtual void switchToTabPageMode();
00623
virtual void finishTabPageMode();
00624
00628
virtual void switchToIDEAlMode();
00629
virtual void finishIDEAlMode(
bool full =
true );
00630
00635
void setIDEAlModeStyle(
int flags ) KDE_DEPRECATED;
00636
00642
void setToolviewStyle(
int flags );
00646
bool isViewTaskBarOn();
00647
00651
virtual void showViewTaskBar();
00652
00656
virtual void hideViewTaskBar();
00657
00661
virtual void fillWindowMenu();
00662
00666 virtual void cascadeWindows() { m_pMdi->cascadeWindows(); }
00667
00671 virtual void cascadeMaximized() { m_pMdi->cascadeMaximized(); }
00672
00676 virtual void expandVertical() { m_pMdi->expandVertical(); }
00677
00681 virtual void expandHorizontal() { m_pMdi->expandHorizontal(); }
00682
00686 virtual void tilePragma() { m_pMdi->tilePragma(); }
00687
00691 virtual void tileAnodine() { m_pMdi->tileAnodine(); }
00692
00696 virtual void tileVertically() { m_pMdi->tileVertically(); }
00697
00702
virtual void setFrameDecorOfAttachedViews(
int frameDecor );
00703
00707
virtual void setEnableMaximizedChildFrmMode(
bool bEnable );
00708
00712
virtual void activateNextWin();
00713
00717
virtual void activatePrevWin();
00718
00722
virtual void activateFirstWin();
00723
00727
virtual void activateLastWin();
00728
00732
virtual void activateView(
int index );
00733
00734
private:
00735
void setupToolViewsForIDEALMode();
00736
void setupTabbedDocumentViewSpace();
00737
class KMdiDocumentViewTabWidget * m_documentTabWidget;
00738
00739
protected:
00740
00741
virtual void resizeEvent(
QResizeEvent * );
00742
00746
virtual void createTaskBar();
00747
00751
virtual void createMdiManager();
00752
00757 void blockClearingOfWindowMenu(
bool bBlocked ) { m_bClearingOfWindowMenuBlocked = bBlocked; }
00758
00759
void findToolViewsDockedToMain(
QPtrList<KDockWidget>* list, KDockWidget::DockPosition dprtmw );
00760
void dockToolViewsIntoContainers(
QPtrList<KDockWidget>& widgetsToReparent, KDockWidget *container );
00761
QStringList prepareIdealToTabs( KDockWidget* container );
00762
void idealToolViewsToStandardTabs(
QStringList widgetNames, KDockWidget::DockPosition pos,
int sizee );
00763
00765 KMdi::TabWidgetVisibility tabWidgetVisibility();
00766
00768
void setTabWidgetVisibility( KMdi::TabWidgetVisibility );
00769
00771
class KTabWidget * tabWidget() const;
00772
00773
00774 protected slots:
00779 virtual
void activateView(
KMdiChildView *pWnd );
00780
00784 virtual
void taskbarButtonRightClicked(
KMdiChildView *pWnd );
00785
00789
void switchOffMaximizeModeForMenu(
KMdiChildFrm* oldChild );
00790
00794
void updateSysButtonConnections(
KMdiChildFrm* oldChild,
KMdiChildFrm* newChild );
00795
00799
void windowMenuItemActivated(
int id );
00800
00804
void dockMenuItemActivated(
int id );
00805
00809
void popupWindowMenu(
QPoint p );
00810
00814
void dragEndTimeOut();
00815
00819
void closeViewButtonPressed();
00820
00821 signals:
00825
void lastChildFrmClosed();
00826
00830
void lastChildViewClosed();
00831
00835
void leftTopLevelMode();
00836
00840
void childViewIsDetachedNow(
QWidget* );
00841
00843
void collapseOverlapContainers();
00844
00846
void mdiModeHasBeenChangedTo( KMdi::MdiMode );
00847
00848
void viewActivated(
KMdiChildView* );
00849
void viewDeactivated( KMdiChildView* );
00850
00851 public slots:
00852
void prevToolViewInDock();
00853
void nextToolViewInDock();
00854
00855 private slots:
00856
void setActiveToolDock( KMdiDockContainer* );
00857
void removeFromActiveDockList( KMdiDockContainer* );
00858
void slotDocCurrentChanged( QWidget* );
00859
void verifyToplevelHeight();
00860 #define protected public
00861 signals:
00862 #undef protected
00863
00864
void toggleTop();
00865
void toggleLeft();
00866
void toggleRight();
00867
void toggleBottom();
00868 };
00869
00870 #endif
00871
00872