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 KCOMMONDECORATION_H
00026 #define KCOMMONDECORATION_H
00027
00028 #include <tqbutton.h>
00029 #include <tqvaluevector.h>
00030
00031 #include "kdecoration.h"
00032
00033 class KDecorationBridge;
00034 class KDecorationFactory;
00035
00036 enum ButtonType {
00037 HelpButton=0,
00038 MaxButton,
00039 MinButton,
00040 CloseButton,
00041 MenuButton,
00042 OnAllDesktopsButton,
00043 AboveButton,
00044 BelowButton,
00045 ShadeButton,
00046 NumButtons
00047 };
00048
00049 class KCommonDecorationButton;
00050
00051 class KCommonDecorationButtonPrivate;
00052 class KCommonDecorationPrivate;
00053
00059 class KWIN_EXPORT KCommonDecoration : public KDecoration
00060 {
00061 Q_OBJECT
00062
00063 public:
00064 KCommonDecoration(KDecorationBridge* bridge, KDecorationFactory* factory);
00065 virtual ~KCommonDecoration();
00066
00100 enum LayoutMetric
00101 {
00102 LM_BorderLeft,
00103 LM_BorderRight,
00104 LM_BorderBottom,
00105 LM_TitleHeight,
00106 LM_TitleBorderLeft,
00107 LM_TitleBorderRight,
00108 LM_TitleEdgeLeft,
00109 LM_TitleEdgeRight,
00110 LM_TitleEdgeTop,
00111 LM_TitleEdgeBottom,
00112 LM_ButtonWidth,
00113 LM_ButtonHeight,
00114 LM_ButtonSpacing,
00115 LM_ExplicitButtonSpacer,
00116 LM_ButtonMarginTop,
00117 LM_RightButtonsMarginTop
00118 };
00119
00120 enum DecorationBehaviour
00121 {
00122 DB_MenuClose,
00123 DB_WindowMask,
00124 DB_ButtonHide
00125 };
00126
00127 enum WindowCorner
00128 {
00129 WC_TopLeft,
00130 WC_TopRight,
00131 WC_BottomLeft,
00132 WC_BottomRight
00133 };
00134
00138 virtual TQString visibleName() const = 0;
00144 virtual TQString defaultButtonsLeft() const = 0;
00150 virtual TQString defaultButtonsRight() const = 0;
00151
00156 virtual bool decorationBehaviour(DecorationBehaviour behaviour) const;
00157
00165 virtual int layoutMetric(LayoutMetric lm, bool respectWindowState = true, const KCommonDecorationButton *button = 0) const;
00166
00171 virtual KCommonDecorationButton *createButton(ButtonType type) = 0;
00172
00176 virtual TQRegion cornerShape(WindowCorner corner);
00177
00185 virtual void updateWindowShape();
00186
00190 virtual void paintEvent(TQPaintEvent *e) = 0;
00191
00196 virtual void updateCaption();
00197
00198 int buttonsLeftWidth() const;
00199 int buttonsRightWidth() const;
00200
00204 void updateLayout() const;
00208 void updateButtons() const;
00212 void resetButtons() const;
00213
00218 bool isToolWindow() const;
00223 TQRect titleRect() const;
00224
00225 public:
00229 virtual void init();
00233 virtual void reset( unsigned long changed );
00234 virtual void borders( int& left, int& right, int& top, int& bottom ) const;
00235 virtual void show();
00236 virtual void resize(const TQSize& s);
00237 virtual TQSize minimumSize() const;
00238 virtual void maximizeChange();
00239 virtual void desktopChange();
00240 virtual void shadeChange();
00241 virtual void iconChange();
00242 virtual void activeChange();
00243 virtual void captionChange();
00244 public slots:
00245 void keepAboveChange(bool above);
00246 void keepBelowChange(bool below);
00247 void slotMaximize();
00248 void slotShade();
00249 void slotKeepAbove();
00250 void slotKeepBelow();
00251 void menuButtonPressed();
00252 void menuButtonReleased();
00253 public:
00254 virtual Position mousePosition(const TQPoint &point) const;
00255
00256 virtual bool eventFilter( TQObject* o, TQEvent* e );
00257 virtual void resizeEvent(TQResizeEvent *e);
00258 virtual void mouseDoubleClickEvent(TQMouseEvent *e);
00259 virtual void wheelEvent(TQWheelEvent *e);
00260
00261 private:
00262 void resetLayout();
00263
00264 void moveWidget(int x, int y, TQWidget *widget) const;
00265 void resizeWidget(int w, int h, TQWidget *widget) const;
00266
00267 typedef TQValueVector <KCommonDecorationButton*> ButtonContainer;
00268 int buttonContainerWidth(const ButtonContainer &btnContainer, bool countHidden = false) const;
00269 bool isModalSystemNotification();
00270 void addButtons(ButtonContainer &btnContainer, const TQString& buttons, bool isLeft);
00271
00272 KCommonDecorationButton *m_button[NumButtons];
00273
00274 ButtonContainer m_buttonsLeft;
00275 ButtonContainer m_buttonsRight;
00276
00277 TQWidget *m_previewWidget;
00278
00279
00280 void calcHiddenButtons();
00281 int btnHideMinWidth;
00282 int btnHideLastWidth;
00283
00284 bool closing;
00285
00286 KCommonDecorationPrivate *d;
00287 };
00288
00292 class KWIN_EXPORT KCommonDecorationButton : public TQButton
00293 {
00294 friend class KCommonDecoration;
00295
00296 Q_OBJECT
00297 TQ_OBJECT
00298
00299 public:
00300 KCommonDecorationButton(ButtonType type, KCommonDecoration *parent, const char *name);
00301 virtual ~KCommonDecorationButton();
00302
00306 enum
00307 {
00308 ManualReset = 1 << 0,
00309 SizeChange = 1 << 1,
00310 ToggleChange = 1 << 2,
00311 StateChange = 1 << 3,
00312 IconChange = 1 << 4,
00313 DecorationReset = 1 << 5
00314 };
00318 virtual void reset(unsigned long changed) = 0;
00322 KCommonDecoration *decoration() const;
00327 ButtonType type() const;
00328
00332 bool isLeft() const;
00333
00337 void setRealizeButtons(int btns);
00341 void setSize(const TQSize &s);
00345 void setTipText(const TQString &tip);
00349 ButtonState lastMousePress() const { return m_lastMouse; }
00350
00351 TQSize sizeHint() const;
00352
00353 protected:
00354 void setToggleButton(bool toggle);
00355 void setOn(bool on);
00356 void setLeft(bool left);
00357 void mousePressEvent(TQMouseEvent *e);
00358 void mouseReleaseEvent(TQMouseEvent *e);
00359
00360 private:
00361 KCommonDecoration *m_decoration;
00362 ButtonType m_type;
00363 int m_realizeButtons;
00364 TQSize m_size;
00365 ButtonState m_lastMouse;
00366
00367 bool m_isLeft;
00368
00369 KCommonDecorationButtonPrivate *d;
00370 };
00371
00372 #endif // KCOMMONDECORATION_H