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 #ifndef KDECORATION_H
00026 #define KDECORATION_H
00027
00028 #include <qcolor.h>
00029 #include <qfont.h>
00030 #include <qobject.h>
00031 #include <qiconset.h>
00032 #include <netwm_def.h>
00033
00034 class KDecorationOptionsPrivate;
00035 class KDecorationBridge;
00036 class KDecorationPrivate;
00037 class KDecorationFactory;
00038
00043 class KDecorationDefines
00044 {
00045 public:
00049 enum Position
00050 {
00051 PositionCenter = 0x00,
00052 PositionLeft = 0x01,
00053 PositionRight = 0x02,
00054 PositionTop = 0x04,
00055 PositionBottom = 0x08,
00056 PositionTopLeft = PositionLeft | PositionTop,
00057 PositionTopRight = PositionRight | PositionTop,
00058 PositionBottomLeft = PositionLeft | PositionBottom,
00059 PositionBottomRight = PositionRight | PositionBottom
00060 };
00064
00065 enum MaximizeMode
00066 {
00067 MaximizeRestore = 0,
00068 MaximizeVertical = 1,
00069 MaximizeHorizontal = 2,
00070
00071 MaximizeFull = MaximizeVertical | MaximizeHorizontal
00072 };
00073
00074 enum WindowOperation
00075 {
00076 MaximizeOp = 5000,
00077 RestoreOp,
00078 MinimizeOp,
00079 MoveOp,
00080 UnrestrictedMoveOp,
00081 ResizeOp,
00082 UnrestrictedResizeOp,
00083 CloseOp,
00084 OnAllDesktopsOp,
00085 ShadeOp,
00086 KeepAboveOp,
00087 KeepBelowOp,
00088 OperationsOp,
00089 ToggleStoreSettingsOp,
00090 HMaximizeOp,
00091 VMaximizeOp,
00092 LowerOp,
00093 FullScreenOp,
00094 NoBorderOp,
00095 NoOp
00096 };
00102 enum ColorType
00103 {
00104 ColorTitleBar,
00105 ColorTitleBlend,
00106 ColorFont,
00107 ColorButtonBg,
00108 ColorFrame,
00109 ColorHandle,
00110 NUM_COLORS
00111 };
00112
00117 enum
00118 {
00119 SettingDecoration = 1 << 0,
00120 SettingColors = 1 << 1,
00121 SettingFont = 1 << 2,
00122 SettingButtons = 1 << 3,
00123 SettingTooltips = 1 << 4,
00124 SettingBorder = 1 << 5
00125 };
00126
00131 enum BorderSize
00132 {
00133 BorderTiny,
00134 BorderNormal,
00135 BorderLarge,
00136 BorderVeryLarge,
00137 BorderHuge,
00138 BorderVeryHuge,
00139 BorderOversized,
00140 BordersCount
00141 };
00142
00143 enum Ability { ABILITY_DUMMY = 10000000 };
00144
00145 enum Requirement { REQUIREMENT_DUMMY = 1000000 };
00146 };
00147
00148 class KDecorationProvides
00149 : public KDecorationDefines
00150 {
00151 public:
00152 virtual bool provides( Requirement req ) = 0;
00153 };
00154
00160 class KDecorationOptions : public KDecorationDefines
00161 {
00162 public:
00163 KDecorationOptions();
00164 virtual ~KDecorationOptions();
00172 const QColor& color(ColorType type, bool active=true) const;
00180 const QColorGroup& colorGroup(ColorType type, bool active=true) const;
00188 const QFont& font(bool active=true, bool small = false) const;
00196 bool customButtonPositions() const;
00213
00214 QString titleButtonsLeft() const;
00225 QString titleButtonsRight() const;
00226
00231 bool showTooltips() const;
00232
00243 BorderSize preferredBorderSize( KDecorationFactory* factory ) const;
00244
00245
00246
00247
00248
00249
00250
00251 bool moveResizeMaximizedWindows() const;
00252
00256 virtual unsigned long updateSettings() = 0;
00257
00258 protected:
00262 KDecorationOptionsPrivate* d;
00263 };
00264
00265
00272 class KDecoration
00273 : public QObject, public KDecorationDefines
00274 {
00275 Q_OBJECT
00276 public:
00282 KDecoration( KDecorationBridge* bridge, KDecorationFactory* factory );
00286 virtual ~KDecoration();
00287
00288
00289
00294 static const KDecorationOptions* options();
00298 bool isActive() const;
00302 bool isCloseable() const;
00306 bool isMaximizable() const;
00312 MaximizeMode maximizeMode() const;
00316 bool isMinimizable() const;
00321 bool providesContextHelp() const;
00327 int desktop() const;
00332 bool isOnAllDesktops() const;
00336 bool isModal() const;
00340 bool isShadeable() const;
00347 bool isShade() const;
00355 bool isSetShade() const;
00359 bool keepAbove() const;
00363 bool keepBelow() const;
00367 bool isMovable() const;
00371 bool isResizable() const;
00395 NET::WindowType windowType( unsigned long supported_types ) const;
00399 QIconSet icon() const;
00403 QString caption() const;
00420 void showWindowMenu( QPoint pos );
00425 void performWindowOperation( WindowOperation op );
00434 void setMask( const QRegion& reg, int mode = 0 );
00438 void clearMask();
00444 bool isPreview() const;
00448 QRect geometry() const;
00454 QRect iconGeometry() const;
00463 QRegion unobscuredRegion( const QRegion& r ) const;
00468 QWidget* workspaceWidget() const;
00472 int width() const;
00476 int height() const;
00482 void processMousePressEvent( QMouseEvent* e );
00483
00484
00485
00491 virtual void init() = 0;
00492
00498 virtual Position mousePosition( const QPoint& p ) const = 0;
00499
00512
00513 virtual void borders( int& left, int& right, int& top, int& bottom ) const = 0;
00521 virtual void resize( const QSize& s ) = 0;
00527 virtual QSize minimumSize() const = 0;
00532 virtual void activeChange() = 0;
00536 virtual void captionChange() = 0;
00540 virtual void iconChange() = 0;
00545 virtual void maximizeChange() = 0;
00551 virtual void desktopChange() = 0;
00556 virtual void shadeChange() = 0;
00567 virtual bool drawbound( const QRect& geom, bool clear );
00578 virtual bool animateMinimize( bool minimize );
00582
00583 virtual bool windowDocked( Position side );
00590 virtual void reset( unsigned long changed );
00591
00592
00593
00600 void setMainWidget( QWidget* );
00610 void createMainWidget( WFlags flags = 0 );
00614 QWidget* initialParentWidget() const;
00621 WFlags initialWFlags() const;
00628 void helperShowHide( bool show );
00632 QWidget* widget();
00636 const QWidget* widget() const;
00640 KDecorationFactory* factory() const;
00644 void grabXServer();
00648 void ungrabXServer();
00649 public slots:
00650
00651
00659 void closeWindow();
00664 void maximize( MaximizeMode mode );
00668 void minimize();
00673 void showContextHelp();
00674 void setDesktop( int desktop );
00678 void toggleOnAllDesktops();
00683 void titlebarDblClickOperation();
00688 void setShade( bool set );
00693 void setKeepAbove( bool set );
00698 void setKeepBelow( bool set );
00699 private:
00700 KDecorationBridge* bridge_;
00701 QWidget* w_;
00702 KDecorationFactory* factory_;
00703 friend class KDecorationOptions;
00704 static KDecorationOptions* options_;
00705 KDecorationPrivate* d;
00706 };
00707
00708 inline
00709 KDecorationDefines::MaximizeMode operator^( KDecorationDefines::MaximizeMode m1, KDecorationDefines::MaximizeMode m2 )
00710 {
00711 return KDecorationDefines::MaximizeMode( int(m1) ^ int(m2) );
00712 }
00713
00714 inline
00715 KDecorationDefines::MaximizeMode operator&( KDecorationDefines::MaximizeMode m1, KDecorationDefines::MaximizeMode m2 )
00716 {
00717 return KDecorationDefines::MaximizeMode( int(m1) & int(m2) );
00718 }
00719
00720 inline
00721 KDecorationDefines::MaximizeMode operator|( KDecorationDefines::MaximizeMode m1, KDecorationDefines::MaximizeMode m2 )
00722 {
00723 return KDecorationDefines::MaximizeMode( int(m1) | int(m2) );
00724 }
00725
00726 inline QWidget* KDecoration::widget()
00727 {
00728 return w_;
00729 }
00730
00731 inline const QWidget* KDecoration::widget() const
00732 {
00733 return w_;
00734 }
00735
00736 inline KDecorationFactory* KDecoration::factory() const
00737 {
00738 return factory_;
00739 }
00740
00741 inline bool KDecoration::isOnAllDesktops() const
00742 {
00743 return desktop() == NET::OnAllDesktops;
00744 }
00745
00746 inline int KDecoration::width() const
00747 {
00748 return geometry().width();
00749 }
00750
00751 inline int KDecoration::height() const
00752 {
00753 return geometry().height();
00754 }
00755
00756 #endif