diff options
Diffstat (limited to 'kwin/lib/kcommondecoration.h')
-rw-r--r-- | kwin/lib/kcommondecoration.h | 372 |
1 files changed, 0 insertions, 372 deletions
diff --git a/kwin/lib/kcommondecoration.h b/kwin/lib/kcommondecoration.h deleted file mode 100644 index 93427b248..000000000 --- a/kwin/lib/kcommondecoration.h +++ /dev/null @@ -1,372 +0,0 @@ -/* - This file is part of the KDE project. - - Copyright (C) 2005 Sandro Giessl <sandro@giessl.com> - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - */ - -#ifndef KCOMMONDECORATION_H -#define KCOMMONDECORATION_H - -#include <tqbutton.h> -#include <tqvaluevector.h> - -#include "kdecoration.h" - -class KDecorationBridge; -class KDecorationFactory; - -enum ButtonType { - HelpButton=0, - MaxButton, - MinButton, - CloseButton, - MenuButton, - OnAllDesktopsButton, - AboveButton, - BelowButton, - ShadeButton, - NumButtons -}; - -class KCommonDecorationButton; - -class KCommonDecorationButtonPrivate; -class KCommonDecorationPrivate; - -/** - * This class eases development of decorations by implementing parts of KDecoration - * which are error prone and common for most decorations. - * It takes care of the window layout, button/action handling, and window mask creation. - */ -class KWIN_EXPORT KCommonDecoration : public KDecoration -{ - Q_OBJECT - - public: - KCommonDecoration(KDecorationBridge* bridge, KDecorationFactory* factory); - virtual ~KCommonDecoration(); - - /** - * Used to calculate the decoration layout. The basic layout looks like this: - * - * Window: - * _______________________________________________________________ - * | LM_TitleEdgeTop | - * |_______________________________________________________________| - * | LM_TitleEdgeLeft | [title] | LM_TitleEdgeRight | - * |__________________|________________________|___________________| - * | LM_TitleEdgeBottom | - * |_______________________________________________________________| - * | | | | - * | | | | - * | | | | - * |LM_BorderLeft LM_BorderRight| - * |_|___________________________________________________________|_| - * | LM_BorderBottom | - * |_______________________________________________________________| - * - * Title: - * ___________________________________________________________________________________ - * | LM_ButtonMarginTop | | LM_ButtonMarginTop | - * |________________________________| |_________________________________| - * | [Buttons] | LM_TitleBorderLeft | LM_TitleHeight | LM_TitleBorderRight | [Buttons] | - * |___________|____________________|________________|_____________________|___________| - * - * Buttons: - * _____________________________________________________________________________________________ - * | button | spacing | button | spacing | explicit spacer | spacing | ... | spacing | button | - * |________|_________|________|_________|_________________|_________|________|_________|________| - * - * @see layoutMetric() - */ - enum LayoutMetric - { - LM_BorderLeft, - LM_BorderRight, - LM_BorderBottom, - LM_TitleHeight, - LM_TitleBorderLeft, - LM_TitleBorderRight, - LM_TitleEdgeLeft, - LM_TitleEdgeRight, - LM_TitleEdgeTop, - LM_TitleEdgeBottom, - LM_ButtonWidth, - LM_ButtonHeight, - LM_ButtonSpacing, - LM_ExplicitButtonSpacer, - LM_ButtonMarginTop, - LM_RightButtonsMarginTop - }; - - enum DecorationBehaviour - { - DB_MenuClose, ///< Close window on double clicking the menu - DB_WindowMask, ///< Set a mask on the window - DB_ButtonHide ///< Hide buttons when there is not enough space in the titlebar - }; - - enum WindowCorner - { - WC_TopLeft, - WC_TopRight, - WC_BottomLeft, - WC_BottomRight - }; - - /** - * The name of the decoration used in the decoration preview. - */ - virtual TQString visibleName() const = 0; - /** - * The default title button order on the left. - * @see KDecoration::titleButtonsLeft() - * @see KDecoration::titleButtonsRight() - */ - virtual TQString defaultButtonsLeft() const = 0; - /** - * The default title button order on the left. - * @see KDecoration::titleButtonsLeft() - * @see KDecoration::titleButtonsRight() - */ - virtual TQString defaultButtonsRight() const = 0; - - /** - * This controls whether some specific behaviour should be enabled or not. - * @see DecorationBehaviour - */ - virtual bool decorationBehaviour(DecorationBehaviour behaviour) const; - - /** - * This controls the layout of the decoration in various ways. It is - * possible to have a different layout for different window states. - * @param lm The layout element. - * @param respectWindowState Whether window states should be taken into account or a "default" state should be assumed. - * @param button For LM_ButtonWidth and LM_ButtonHeight, the button. - */ - virtual int layoutMetric(LayoutMetric lm, bool respectWindowState = true, const KCommonDecorationButton *button = 0) const; - - /** - * Create a new title bar button. KCommonDecoration takes care of memory management. - * @return a pointer to the button, or 0 if the button should not be created. - */ - virtual KCommonDecorationButton *createButton(ButtonType type) = 0; - - /** - * @return the mask for the specific window corner. - */ - virtual TQRegion cornerShape(WindowCorner corner); - - /** - * This updates the window mask using the information provided by - * cornerShape(). Edges which are aligned to screen corners are not - * tqshaped for better usability (remember to paint these areas in paintEvent(), too). - * You normally don't want/need to reimplement updateWindowShape(). - * @see cornerShape() - */ - virtual void updateWindowShape(); - - /** - * Draw the window decoration. - */ - virtual void paintEvent(TQPaintEvent *e) = 0; - - /** - * This is used to update the painting of the title bar after the caption has been changed. - * Reimplement for a more efficient implementation (default calls update() on the whole decoration). - */ - virtual void updateCaption(); - - int buttonsLeftWidth() const; - int buttonsRightWidth() const; - - /** - * TODO: remove? - */ - void updateLayout() const; - /** - * Makes sure all buttons are repainted. - */ - void updateButtons() const; - /** - * Manually call reset() on each button. - */ - void resetButtons() const; - - /** - * Convenience method. - * @returns true if the window type is NET::Toolbar, NET::Utility, or NET::Menu - */ - bool isToolWindow() const; - /** - * Convenience method. - * @returns the title rect. - */ - TQRect titleRect() const; - - public: - /** - * Handles widget and layout creation, call the base implementation when subclassing this member. - */ - virtual void init(); - /** - * Handles SettingButtons, call the base implementation when subclassing this member. - */ - virtual void reset( unsigned long changed ); - virtual void borders( int& left, int& right, int& top, int& bottom ) const; - virtual void show(); - virtual void resize(const TQSize& s); - virtual TQSize tqminimumSize() const; - virtual void maximizeChange(); - virtual void desktopChange(); - virtual void shadeChange(); - virtual void iconChange(); - virtual void activeChange(); - virtual void captionChange(); - public slots: - void keepAboveChange(bool above); - void keepBelowChange(bool below); - void slotMaximize(); - void slotShade(); - void slotKeepAbove(); - void slotKeepBelow(); - void menuButtonPressed(); - void menuButtonReleased(); - public: - virtual Position mousePosition(const TQPoint &point) const; - - virtual bool eventFilter( TQObject* o, TQEvent* e ); - virtual void resizeEvent(TQResizeEvent *e); - virtual void mouseDoubleClickEvent(TQMouseEvent *e); - virtual void wheelEvent(TQWheelEvent *e); - - private: - void resetLayout(); - - void moveWidget(int x, int y, TQWidget *widget) const; - void resizeWidget(int w, int h, TQWidget *widget) const; - - typedef TQValueVector <KCommonDecorationButton*> ButtonContainer; ///< If the entry is 0, it's a spacer. - int buttonContainerWidth(const ButtonContainer &btnContainer, bool countHidden = false) const; - bool isModalSystemNotification(); - void addButtons(ButtonContainer &btnContainer, const TQString& buttons, bool isLeft); - - KCommonDecorationButton *m_button[NumButtons]; - - ButtonContainer m_buttonsLeft; - ButtonContainer m_buttonsRight; - - TQWidget *m_previewWidget; - - // button hiding for small windows - void calcHiddenButtons(); - int btnHideMinWidth; - int btnHideLastWidth; - - bool closing; // for menu doubleclick closing... - - KCommonDecorationPrivate *d; -}; - -/** - * Title bar buttons of KCommonDecoration need to inherit this class. - */ -class KWIN_EXPORT KCommonDecorationButton : public TQButton -{ - friend class KCommonDecoration; - - Q_OBJECT - TQ_OBJECT - - public: - KCommonDecorationButton(ButtonType type, KCommonDecoration *parent, const char *name); - virtual ~KCommonDecorationButton(); - - /** - * These flags specify what has changed, e.g. the reason for a reset(). - */ - enum - { - ManualReset = 1 << 0, ///< The button might want to do a full reset for some reason... - SizeChange = 1 << 1, ///< The button size changed @see setSize() - ToggleChange = 1 << 2, ///< The button toggle state has changed @see setToggleButton() - StateChange = 1 << 3, ///< The button has been set pressed or not... @see setOn() - IconChange = 1 << 4, ///< The window icon has been changed - DecorationReset = 1 << 5 ///< E.g. when decoration colors have changed - }; - /** - * Initialize the button after size change etc. - */ - virtual void reset(unsigned long changed) = 0; - /** - * @returns the KCommonDecoration the button belongs to. - */ - KCommonDecoration *decoration() const; - /** - * @returns the button type. - * @see ButtonType - */ - ButtonType type() const; - - /** - * Whether the button is left of the titlebar or not. - */ - bool isLeft() const; - - /** - * Set which mouse buttons the button should honor. Used e.g. to prevent accidental right mouse clicks. - */ - void setRealizeButtons(int btns); - /** - * Set the button size. - */ - void setSize(const TQSize &s); - /** - * Set/update the button's tool tip - */ - void setTipText(const TQString &tip); - /** - * The mouse button that has been clicked last time. - */ - ButtonState lastMousePress() const { return m_lastMouse; } - - TQSize tqsizeHint() const; - - protected: - void setToggleButton(bool toggle); - void setOn(bool on); - void setLeft(bool left); - void mousePressEvent(TQMouseEvent *e); - void mouseReleaseEvent(TQMouseEvent *e); - - private: - KCommonDecoration *m_decoration; - ButtonType m_type; - int m_realizeButtons; - TQSize m_size; - ButtonState m_lastMouse; - - bool m_isLeft; - - KCommonDecorationButtonPrivate *d; -}; - -#endif // KCOMMONDECORATION_H |