kmdichildfrm.h00001
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 #ifndef _KMDI_CHILD_FRM_H_
00029 #define _KMDI_CHILD_FRM_H_
00030
00031 #include <qptrlist.h>
00032 #include <qpixmap.h>
00033 #include <qpushbutton.h>
00034 #include <qlabel.h>
00035 #include <qdatetime.h>
00036 #include <qlayout.h>
00037
00038 #include <qdict.h>
00039
00040 #include "kmdichildfrmcaption.h"
00041
00042 class KMdiChildArea;
00043 class KMdiChildView;
00044 class QPopupMenu;
00045 class QToolButton;
00046
00047
00052 class KMDI_EXPORT KMdiWin32IconButton : public QLabel
00053 {
00054 Q_OBJECT
00055 public:
00056 KMdiWin32IconButton( QWidget* parent, const char* name = 0 );
00057 virtual void mousePressEvent( QMouseEvent* );
00058
00059 signals:
00060 void pressed();
00061 };
00062
00063
00064
00065
00066
00071 class KMDI_EXPORT KMdiChildFrmMoveEvent : public QCustomEvent
00072 {
00073 public:
00074 KMdiChildFrmMoveEvent( QMoveEvent *e ) : QCustomEvent( QEvent::Type( QEvent::User + int( KMdi::EV_Move ) ), e ) {}
00075
00076 };
00077
00078
00083 class KMDI_EXPORT KMdiChildFrmDragBeginEvent : public QCustomEvent
00084 {
00085 public:
00086 KMdiChildFrmDragBeginEvent( QMouseEvent *e ) : QCustomEvent( QEvent::Type( QEvent::User + int( KMdi::EV_DragBegin ) ), e ) {}
00087 };
00088
00089
00094 class KMDI_EXPORT KMdiChildFrmDragEndEvent : public QCustomEvent
00095 {
00096 public:
00097 KMdiChildFrmDragEndEvent( QMouseEvent *e ) : QCustomEvent( QEvent::Type( QEvent::User + int( KMdi::EV_DragEnd ) ), e ) {}
00098 };
00099
00100
00105 class KMDI_EXPORT KMdiChildFrmResizeBeginEvent : public QCustomEvent
00106 {
00107 public:
00108 KMdiChildFrmResizeBeginEvent( QMouseEvent *e ) : QCustomEvent( QEvent::Type( QEvent::User + int( KMdi::EV_ResizeBegin ) ), e ) {}
00109 };
00110
00111
00116 class KMDI_EXPORT KMdiChildFrmResizeEndEvent : public QCustomEvent
00117 {
00118 public:
00119 KMdiChildFrmResizeEndEvent( QMouseEvent *e ) : QCustomEvent( QEvent::Type( QEvent::User + int( KMdi::EV_ResizeEnd ) ), e ) {}
00120 };
00121
00122
00123 class KMdiChildFrmPrivate;
00124
00129
00130 class KMDI_EXPORT KMdiChildFrm : public QFrame
00131 {
00132 friend class KMdiChildArea;
00133 friend class KMdiChildFrmCaption;
00134
00135 Q_OBJECT
00136
00137
00138 public:
00139 enum MdiWindowState { Normal, Maximized, Minimized };
00140
00141 KMdiChildView* m_pClient;
00142
00143 protected:
00144 KMdiChildArea* m_pManager;
00145 KMdiChildFrmCaption* m_pCaption;
00146 KMdiWin32IconButton* m_pWinIcon;
00147 QToolButton* m_pUnixIcon;
00148 QToolButton* m_pMinimize;
00149 QToolButton* m_pMaximize;
00150 QToolButton* m_pClose;
00151 QToolButton* m_pUndock;
00152 MdiWindowState m_state;
00153 QRect m_restoredRect;
00154 int m_iResizeCorner;
00155 int m_iLastCursorCorner;
00156 bool m_bResizing;
00157 bool m_bDragging;
00158 QPixmap* m_pIconButtonPixmap;
00159 QPixmap* m_pMinButtonPixmap;
00160 QPixmap* m_pMaxButtonPixmap;
00161 QPixmap* m_pRestoreButtonPixmap;
00162 QPixmap* m_pCloseButtonPixmap;
00163 QPixmap* m_pUndockButtonPixmap;
00164
00168 int m_windowMenuID;
00169
00173 QPopupMenu* m_pSystemMenu;
00174
00175 QSize m_oldClientMinSize;
00176 QSize m_oldClientMaxSize;
00177 QLayout::ResizeMode m_oldLayoutResizeMode;
00178 QTime m_timeMeasure;
00179
00180
00181 public:
00182
00186 KMdiChildFrm( KMdiChildArea *parent );
00187
00192 ~KMdiChildFrm();
00193
00199 void setClient( KMdiChildView *w, bool bAutomaticResize = false );
00200
00205 void unsetClient( QPoint positionOffset = QPoint( 0, 0 ) );
00206
00210 void setIcon( const QPixmap &pxm );
00211
00215 QPixmap* icon() const;
00216
00220 void enableClose( bool bEnable );
00221
00225 void setCaption( const QString& text );
00226
00230 const QString& caption() { return m_pCaption->m_szCaption; }
00231
00235 void setState( MdiWindowState state, bool bAnimate = true );
00236
00240 inline MdiWindowState state() const { return m_state; }
00241
00245 QRect mdiAreaContentsRect() const;
00246
00250 QRect restoreGeometry() const;
00251
00255 void setRestoreGeometry( const QRect& newRestGeo );
00256
00261 void updateRects() { resizeEvent( 0 ); }
00262
00266 QPopupMenu* systemMenu() const;
00267
00271 inline int captionHeight() const { return m_pCaption->height(); }
00272
00276 void redecorateButtons();
00277
00281 bool isInDrag() const { return m_bDragging; }
00282
00286 bool isInResize() const { return m_bResizing; }
00287
00292 void raiseAndActivate();
00293
00299 virtual void setMinimumSize ( int minw, int minh );
00300
00301 public slots:
00302
00303 void slot_resizeViaSystemMenu();
00304
00305 protected:
00306
00312 virtual void resizeEvent( QResizeEvent * );
00313
00319 virtual void mouseMoveEvent( QMouseEvent *e );
00320
00326 virtual void mousePressEvent( QMouseEvent *e );
00327
00332 virtual void mouseReleaseEvent( QMouseEvent * );
00333
00339 virtual void moveEvent( QMoveEvent* me );
00340
00344 virtual void leaveEvent( QEvent * );
00345
00352 virtual bool eventFilter( QObject*, QEvent* );
00353
00358 void resizeWindow( int resizeCorner, int x, int y );
00359
00363 void setResizeCursor( int resizeCorner );
00364
00368 void unsetResizeCursor();
00369
00374 virtual void switchToMinimizeLayout();
00375
00379 void doResize();
00380
00385 void doResize( bool captionOnly );
00386
00387 protected slots:
00388
00392 void maximizePressed();
00393
00397 void restorePressed();
00398
00402 void minimizePressed();
00403
00407 void closePressed();
00408
00412 void undockPressed();
00413
00417 void showSystemMenu();
00418
00419 protected:
00420
00425 void linkChildren( QDict<FocusPolicy>* pFocPolDict );
00426
00431 QDict<QWidget::FocusPolicy>* unlinkChildren();
00432
00438 int getResizeCorner( int ax, int ay );
00439
00440 private:
00441 KMdiChildFrmPrivate *d;
00442 };
00443
00444 #endif //_KMDICHILDFRM_H_
00445
00446
|