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 #include <kdeversion.h>
00034
00035 class KDecorationOptionsPrivate;
00036 class KDecorationBridge;
00037 class KDecorationPrivate;
00038 class KDecorationFactory;
00039
00045 class KDecorationDefines
00046 {
00047 public:
00051 enum Position
00052 {
00053 PositionCenter = 0x00,
00054 PositionLeft = 0x01,
00055 PositionRight = 0x02,
00056 PositionTop = 0x04,
00057 PositionBottom = 0x08,
00058 PositionTopLeft = PositionLeft | PositionTop,
00059 PositionTopRight = PositionRight | PositionTop,
00060 PositionBottomLeft = PositionLeft | PositionBottom,
00061 PositionBottomRight = PositionRight | PositionBottom
00062 };
00066
00067 enum MaximizeMode
00068 {
00069 MaximizeRestore = 0,
00070 MaximizeVertical = 1,
00071 MaximizeHorizontal = 2,
00072
00073 MaximizeFull = MaximizeVertical | MaximizeHorizontal
00074 };
00075
00076 enum WindowOperation
00077 {
00078 MaximizeOp = 5000,
00079 RestoreOp,
00080 MinimizeOp,
00081 MoveOp,
00082 UnrestrictedMoveOp,
00083 ResizeOp,
00084 UnrestrictedResizeOp,
00085 CloseOp,
00086 OnAllDesktopsOp,
00087 ShadeOp,
00088 KeepAboveOp,
00089 KeepBelowOp,
00090 OperationsOp,
00091 WindowRulesOp,
00092 ToggleStoreSettingsOp = WindowRulesOp,
00093 HMaximizeOp,
00094 VMaximizeOp,
00095 LowerOp,
00096 FullScreenOp,
00097 NoBorderOp,
00098 NoOp
00099 };
00105 enum ColorType
00106 {
00107 ColorTitleBar,
00108 ColorTitleBlend,
00109 ColorFont,
00110 ColorButtonBg,
00111 ColorFrame,
00112 ColorHandle,
00113 NUM_COLORS
00114 };
00115
00120 enum
00121 {
00122 SettingDecoration = 1 << 0,
00123 SettingColors = 1 << 1,
00124 SettingFont = 1 << 2,
00125 SettingButtons = 1 << 3,
00126 SettingTooltips = 1 << 4,
00127 SettingBorder = 1 << 5
00128 };
00129
00134 enum BorderSize
00135 {
00136 BorderTiny,
00137 BorderNormal,
00138 BorderLarge,
00139 BorderVeryLarge,
00140 BorderHuge,
00141 BorderVeryHuge,
00142 BorderOversized,
00143 BordersCount
00144 };
00145
00146 enum Ability { ABILITY_DUMMY = 10000000 };
00147
00148 enum Requirement { REQUIREMENT_DUMMY = 1000000 };
00149 };
00150
00151 class KDecorationProvides
00152 : public KDecorationDefines
00153 {
00154 public:
00155 virtual bool provides( Requirement req ) = 0;
00156 };
00157
00164 class KDecorationOptions : public KDecorationDefines
00165 {
00166 public:
00167 KDecorationOptions();
00168 virtual ~KDecorationOptions();
00176 const QColor& color(ColorType type, bool active=true) const;
00184 const QColorGroup& colorGroup(ColorType type, bool active=true) const;
00192 const QFont& font(bool active=true, bool small = false) const;
00200 bool customButtonPositions() const;
00220
00221 QString titleButtonsLeft() const;
00232 QString titleButtonsRight() const;
00233
00238 bool showTooltips() const;
00239
00250 BorderSize preferredBorderSize( KDecorationFactory* factory ) const;
00251
00252
00253
00254
00255
00256
00257
00258 bool moveResizeMaximizedWindows() const;
00259
00263 virtual unsigned long updateSettings() = 0;
00264
00265 protected:
00269 KDecorationOptionsPrivate* d;
00270 };
00271
00272
00280 class KDecoration
00281 : public QObject, public KDecorationDefines
00282 {
00283 Q_OBJECT
00284 public:
00290 KDecoration( KDecorationBridge* bridge, KDecorationFactory* factory );
00294 virtual ~KDecoration();
00295
00296
00297
00302 static const KDecorationOptions* options();
00306 bool isActive() const;
00310 bool isCloseable() const;
00314 bool isMaximizable() const;
00320 MaximizeMode maximizeMode() const;
00324 bool isMinimizable() const;
00329 bool providesContextHelp() const;
00335 int desktop() const;
00340 bool isOnAllDesktops() const;
00344 bool isModal() const;
00348 bool isShadeable() const;
00355 bool isShade() const;
00363 bool isSetShade() const;
00367 bool keepAbove() const;
00371 bool keepBelow() const;
00375 bool isMovable() const;
00379 bool isResizable() const;
00403 NET::WindowType windowType( unsigned long supported_types ) const;
00407 QIconSet icon() const;
00411 QString caption() const;
00438 void showWindowMenu( const QRect &pos );
00439
00443 void showWindowMenu( QPoint pos );
00448 void performWindowOperation( WindowOperation op );
00457 void setMask( const QRegion& reg, int mode = 0 );
00461 void clearMask();
00467 bool isPreview() const;
00471 QRect geometry() const;
00477 QRect iconGeometry() const;
00486 QRegion unobscuredRegion( const QRegion& r ) const;
00491 QWidget* workspaceWidget() const;
00495 int width() const;
00499 int height() const;
00505 void processMousePressEvent( QMouseEvent* e );
00506
00507
00508
00514 virtual void init() = 0;
00515
00521 virtual Position mousePosition( const QPoint& p ) const = 0;
00522
00535
00536 virtual void borders( int& left, int& right, int& top, int& bottom ) const = 0;
00544 virtual void resize( const QSize& s ) = 0;
00550 virtual QSize minimumSize() const = 0;
00555 virtual void activeChange() = 0;
00559 virtual void captionChange() = 0;
00563 virtual void iconChange() = 0;
00568 virtual void maximizeChange() = 0;
00574 virtual void desktopChange() = 0;
00579 virtual void shadeChange() = 0;
00580 #if KDE_IS_VERSION( 3, 90, 0 )
00581 #warning Redo all the XYZChange() virtuals as signals.
00582 #endif
00583 signals:
00588 void keepAboveChanged( bool );
00593 void keepBelowChanged( bool );
00594 public:
00605 virtual bool drawbound( const QRect& geom, bool clear );
00616 virtual bool animateMinimize( bool minimize );
00620
00621 virtual bool windowDocked( Position side );
00628 virtual void reset( unsigned long changed );
00629
00630
00631
00638 void setMainWidget( QWidget* );
00648 void createMainWidget( WFlags flags = 0 );
00652 QWidget* initialParentWidget() const;
00659 WFlags initialWFlags() const;
00666 void helperShowHide( bool show );
00670 QWidget* widget();
00674 const QWidget* widget() const;
00678 KDecorationFactory* factory() const;
00682 void grabXServer();
00686 void ungrabXServer();
00687 public slots:
00688
00689
00697 void closeWindow();
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719 #if KDE_IS_VERSION( 3, 90, 0 )
00720 #warning Update the docs.
00721 #endif
00722 void maximize( ButtonState button );
00727 void maximize( MaximizeMode mode );
00731 void minimize();
00736 void showContextHelp();
00741 void setDesktop( int desktop );
00745 void toggleOnAllDesktops();
00750 void titlebarDblClickOperation();
00755 void setShade( bool set );
00760 void setKeepAbove( bool set );
00765 void setKeepBelow( bool set );
00769 void emitKeepAboveChanged( bool above ) { emit keepAboveChanged( above ); }
00773 void emitKeepBelowChanged( bool below ) { emit keepBelowChanged( below ); }
00774 private:
00775 KDecorationBridge* bridge_;
00776 QWidget* w_;
00777 KDecorationFactory* factory_;
00778 friend class KDecorationOptions;
00779 static KDecorationOptions* options_;
00780 KDecorationPrivate* d;
00781 };
00782
00783 inline
00784 KDecorationDefines::MaximizeMode operator^( KDecorationDefines::MaximizeMode m1, KDecorationDefines::MaximizeMode m2 )
00785 {
00786 return KDecorationDefines::MaximizeMode( int(m1) ^ int(m2) );
00787 }
00788
00789 inline
00790 KDecorationDefines::MaximizeMode operator&( KDecorationDefines::MaximizeMode m1, KDecorationDefines::MaximizeMode m2 )
00791 {
00792 return KDecorationDefines::MaximizeMode( int(m1) & int(m2) );
00793 }
00794
00795 inline
00796 KDecorationDefines::MaximizeMode operator|( KDecorationDefines::MaximizeMode m1, KDecorationDefines::MaximizeMode m2 )
00797 {
00798 return KDecorationDefines::MaximizeMode( int(m1) | int(m2) );
00799 }
00800
00801 inline QWidget* KDecoration::widget()
00802 {
00803 return w_;
00804 }
00805
00806 inline const QWidget* KDecoration::widget() const
00807 {
00808 return w_;
00809 }
00810
00811 inline KDecorationFactory* KDecoration::factory() const
00812 {
00813 return factory_;
00814 }
00815
00816 inline bool KDecoration::isOnAllDesktops() const
00817 {
00818 return desktop() == NET::OnAllDesktops;
00819 }
00820
00821 inline int KDecoration::width() const
00822 {
00823 return geometry().width();
00824 }
00825
00826 inline int KDecoration::height() const
00827 {
00828 return geometry().height();
00829 }
00830
00831 #endif