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 <tqcolor.h>
00029 #include <tqfont.h>
00030 #include <tqobject.h>
00031 #include <tqiconset.h>
00032 #include <netwm_def.h>
00033 #include <kdeversion.h>
00034
00035 class KDecorationOptionsPrivate;
00036 class KDecorationBridge;
00037 class KDecorationPrivate;
00038 class KDecorationFactory;
00039
00040 #define KWIN_EXPORT KDE_EXPORT
00041
00047 class KWIN_EXPORT KDecorationDefines
00048 {
00049 public:
00053 enum Position
00054 {
00055 PositionCenter = 0x00,
00056 PositionLeft = 0x01,
00057 PositionRight = 0x02,
00058 PositionTop = 0x04,
00059 PositionBottom = 0x08,
00060 PositionTopLeft = PositionLeft | PositionTop,
00061 PositionTopRight = PositionRight | PositionTop,
00062 PositionBottomLeft = PositionLeft | PositionBottom,
00063 PositionBottomRight = PositionRight | PositionBottom
00064 };
00068
00069 enum MaximizeMode
00070 {
00071 MaximizeRestore = 0,
00072 MaximizeVertical = 1,
00073 MaximizeHorizontal = 2,
00074
00075 MaximizeFull = MaximizeVertical | MaximizeHorizontal
00076 };
00077
00078 enum WindowOperation
00079 {
00080 MaximizeOp = 5000,
00081 RestoreOp,
00082 MinimizeOp,
00083 MoveOp,
00084 UnrestrictedMoveOp,
00085 ResizeOp,
00086 UnrestrictedResizeOp,
00087 CloseOp,
00088 OnAllDesktopsOp,
00089 ShadeOp,
00090 KeepAboveOp,
00091 KeepBelowOp,
00092 OperationsOp,
00093 WindowRulesOp,
00094 ToggleStoreSettingsOp = WindowRulesOp,
00095 HMaximizeOp,
00096 VMaximizeOp,
00097 LowerOp,
00098 FullScreenOp,
00099 NoBorderOp,
00100 ShadowOp,
00101 NoOp,
00102 SetupWindowShortcutOp,
00103 ApplicationRulesOp
00104 };
00110 enum ColorType
00111 {
00112 ColorTitleBar,
00113 ColorTitleBlend,
00114 ColorFont,
00115 ColorButtonBg,
00116 ColorFrame,
00117 ColorHandle,
00118 NUM_COLORS
00119 };
00120
00125 enum
00126 {
00127 SettingDecoration = 1 << 0,
00128 SettingColors = 1 << 1,
00129 SettingFont = 1 << 2,
00130 SettingButtons = 1 << 3,
00131 SettingTooltips = 1 << 4,
00132 SettingBorder = 1 << 5
00133 };
00134
00139 enum BorderSize
00140 {
00141 BorderTiny,
00142 BorderNormal,
00143 BorderLarge,
00144 BorderVeryLarge,
00145 BorderHuge,
00146 BorderVeryHuge,
00147 BorderOversized,
00148 BordersCount
00149 };
00150
00155 enum Ability
00156 {
00157 AbilityAnnounceButtons = 0,
00158 AbilityButtonMenu = 1000,
00159 AbilityButtonOnAllDesktops = 1001,
00160 AbilityButtonSpacer = 1002,
00161 AbilityButtonHelp = 1003,
00162 AbilityButtonMinimize = 1004,
00163 AbilityButtonMaximize = 1005,
00164 AbilityButtonClose = 1006,
00165 AbilityButtonAboveOthers = 1007,
00166 AbilityButtonBelowOthers = 1008,
00167 AbilityButtonShade = 1009,
00168 AbilityButtonResize = 1010,
00169 ABILITY_DUMMY = 10000000
00170 };
00171
00172 enum Requirement { REQUIREMENT_DUMMY = 1000000 };
00173 };
00174
00175 class KDecorationProvides
00176 : public KDecorationDefines
00177 {
00178 public:
00179 virtual bool provides( Requirement req ) = 0;
00180 };
00181
00188 class KWIN_EXPORT KDecorationOptions : public KDecorationDefines
00189 {
00190 public:
00191 KDecorationOptions();
00192 virtual ~KDecorationOptions();
00200 const TQColor& color(ColorType type, bool active=true) const;
00208 const TQColorGroup& colorGroup(ColorType type, bool active=true) const;
00216 const TQFont& font(bool active=true, bool small = false) const;
00224 bool customButtonPositions() const;
00246 TQString titleButtonsLeft() const;
00258 TQString titleButtonsRight() const;
00259
00264 bool showTooltips() const;
00265
00276 BorderSize preferredBorderSize( KDecorationFactory* factory ) const;
00277
00278
00279
00280
00281
00282
00283
00284 bool moveResizeMaximizedWindows() const;
00285
00289 WindowOperation operationMaxButtonClick( Qt::ButtonState button ) const;
00290
00294 virtual unsigned long updateSettings() = 0;
00295
00296 protected:
00300 KDecorationOptionsPrivate* d;
00301 };
00302
00303
00311 class KWIN_EXPORT KDecoration
00312 : public TQObject, public KDecorationDefines
00313 {
00314 Q_OBJECT
00315 public:
00321 KDecoration( KDecorationBridge* bridge, KDecorationFactory* factory );
00325 virtual ~KDecoration();
00326
00327
00328
00333 static const KDecorationOptions* options();
00337 bool isActive() const;
00341 bool isCloseable() const;
00345 bool isMaximizable() const;
00351 MaximizeMode maximizeMode() const;
00355 bool isMinimizable() const;
00360 bool providesContextHelp() const;
00366 int desktop() const;
00371 bool isOnAllDesktops() const;
00375 bool isModal() const;
00379 bool isShadeable() const;
00388 bool isShade() const;
00396 bool isSetShade() const;
00400 bool keepAbove() const;
00404 bool keepBelow() const;
00408 bool isMovable() const;
00412 bool isResizable() const;
00436 NET::WindowType windowType( unsigned long supported_types ) const;
00440 TQIconSet icon() const;
00444 TQString caption() const;
00471 void showWindowMenu( const TQRect &pos );
00472
00476 void showWindowMenu( TQPoint pos );
00481 void performWindowOperation( WindowOperation op );
00490 void setMask( const TQRegion& reg, int mode = 0 );
00494 void clearMask();
00500 bool isPreview() const;
00504 TQRect geometry() const;
00510 TQRect iconGeometry() const;
00519 TQRegion unobscuredRegion( const TQRegion& r ) const;
00524 TQWidget* workspaceWidget() const;
00538 WId windowId() const;
00542 int width() const;
00546 int height() const;
00552 void processMousePressEvent( TQMouseEvent* e );
00553
00554
00555
00561 virtual void init() = 0;
00562
00568 virtual Position mousePosition( const TQPoint& p ) const = 0;
00569
00582
00583 virtual void borders( int& left, int& right, int& top, int& bottom ) const = 0;
00591 virtual void resize( const TQSize& s ) = 0;
00597 virtual TQSize minimumSize() const = 0;
00602 virtual void activeChange() = 0;
00606 virtual void captionChange() = 0;
00610 virtual void iconChange() = 0;
00615 virtual void maximizeChange() = 0;
00621 virtual void desktopChange() = 0;
00626 virtual void shadeChange() = 0;
00627 #if KDE_IS_VERSION( 3, 90, 0 )
00628 #warning Redo all the XYZChange() virtuals as signals.
00629 #endif
00630 signals:
00635 void keepAboveChanged( bool );
00640 void keepBelowChanged( bool );
00641 public:
00655 virtual bool drawbound( const TQRect& geom, bool clear );
00666 virtual bool animateMinimize( bool minimize );
00670
00671 virtual bool windowDocked( Position side );
00678 virtual void reset( unsigned long changed );
00679
00680
00681
00688 void setMainWidget( TQWidget* );
00698 void createMainWidget( WFlags flags = 0 );
00702 TQWidget* initialParentWidget() const;
00709 WFlags initialWFlags() const;
00716 void helperShowHide( bool show );
00720 TQWidget* widget();
00724 const TQWidget* widget() const;
00728 KDecorationFactory* factory() const;
00732 void grabXServer();
00736 void ungrabXServer();
00737 public slots:
00738
00739
00747 void closeWindow();
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769 #if KDE_IS_VERSION( 3, 90, 0 )
00770 #warning Update the docs.
00771 #endif
00772 void maximize( ButtonState button );
00777 void maximize( MaximizeMode mode );
00781 void minimize();
00786 void showContextHelp();
00791 void setDesktop( int desktop );
00795 void toggleOnAllDesktops();
00800 void titlebarDblClickOperation();
00807 void titlebarMouseWheelOperation( int delta );
00812 void setShade( bool set );
00817 void setKeepAbove( bool set );
00822 void setKeepBelow( bool set );
00826 void emitKeepAboveChanged( bool above ) { emit keepAboveChanged( above ); }
00830 void emitKeepBelowChanged( bool below ) { emit keepBelowChanged( below ); }
00831 private:
00832 KDecorationBridge* bridge_;
00833 TQWidget* w_;
00834 KDecorationFactory* factory_;
00835 friend class KDecorationOptions;
00836 static KDecorationOptions* options_;
00837 KDecorationPrivate* d;
00838 };
00839
00840 inline
00841 KDecorationDefines::MaximizeMode operator^( KDecorationDefines::MaximizeMode m1, KDecorationDefines::MaximizeMode m2 )
00842 {
00843 return KDecorationDefines::MaximizeMode( int(m1) ^ int(m2) );
00844 }
00845
00846 inline
00847 KDecorationDefines::MaximizeMode operator&( KDecorationDefines::MaximizeMode m1, KDecorationDefines::MaximizeMode m2 )
00848 {
00849 return KDecorationDefines::MaximizeMode( int(m1) & int(m2) );
00850 }
00851
00852 inline
00853 KDecorationDefines::MaximizeMode operator|( KDecorationDefines::MaximizeMode m1, KDecorationDefines::MaximizeMode m2 )
00854 {
00855 return KDecorationDefines::MaximizeMode( int(m1) | int(m2) );
00856 }
00857
00858 inline TQWidget* KDecoration::widget()
00859 {
00860 return w_;
00861 }
00862
00863 inline const TQWidget* KDecoration::widget() const
00864 {
00865 return w_;
00866 }
00867
00868 inline KDecorationFactory* KDecoration::factory() const
00869 {
00870 return factory_;
00871 }
00872
00873 inline bool KDecoration::isOnAllDesktops() const
00874 {
00875 return desktop() == NET::OnAllDesktops;
00876 }
00877
00878 inline int KDecoration::width() const
00879 {
00880 return geometry().width();
00881 }
00882
00883 inline int KDecoration::height() const
00884 {
00885 return geometry().height();
00886 }
00887
00888 #endif