/******************************************************************** Copyright (C) 2009, 2010 Martin Gräßlin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . *********************************************************************/ #ifndef AURORAE_H #define AURORAE_H #include "themeconfig.h" #include #include class QDeclarativeView; class QGraphicsSceneMouseEvent; class QGraphicsScene; namespace Aurorae { class AuroraeTheme; class AuroraeScene; class AuroraeFactory : public QObject, public KDecorationFactoryUnstable { public: ~AuroraeFactory(); static AuroraeFactory* instance(); bool reset(unsigned long changed); KDecoration *createDecoration(KDecorationBridge*); bool supports(Ability ability) const; virtual QList< BorderSize > borderSizes() const; AuroraeTheme *theme() const { return m_theme; } private: AuroraeFactory(); void init(); private: static AuroraeFactory *s_instance; AuroraeTheme *m_theme; }; class AuroraeClient : public KDecorationUnstable { Q_OBJECT Q_PROPERTY(bool active READ isActive NOTIFY activeChanged) Q_PROPERTY(QString caption READ caption NOTIFY captionChanged) Q_PROPERTY(int desktop READ desktop WRITE setDesktop NOTIFY desktopChanged) Q_PROPERTY(QRect geometry READ geometry) Q_PROPERTY(int height READ height) Q_PROPERTY(QIcon icon READ icon NOTIFY iconChanged) Q_PROPERTY(bool closeable READ isCloseable) Q_PROPERTY(bool maximizeable READ isMaximizable) Q_PROPERTY(bool minimizeable READ isMinimizable) Q_PROPERTY(bool modal READ isModal) Q_PROPERTY(bool moveable READ isMovable) Q_PROPERTY(bool onAllDesktops READ isOnAllDesktops NOTIFY desktopChanged) Q_PROPERTY(bool preview READ isPreview CONSTANT) Q_PROPERTY(bool resizeable READ isResizable) Q_PROPERTY(bool setShade READ isSetShade NOTIFY shadeChanged) Q_PROPERTY(bool shade READ isShade WRITE setShade NOTIFY shadeChanged) Q_PROPERTY(bool shadeable READ isShadeable) Q_PROPERTY(bool keepAbove READ keepAbove WRITE setKeepAbove NOTIFY keepAboveChanged) Q_PROPERTY(bool keepBelow READ keepBelow WRITE setKeepBelow NOTIFY keepBelowChanged) // TODO: maximize mode Q_PROPERTY(bool providesContextHelp READ providesContextHelp) Q_PROPERTY(QRect transparentRect READ transparentRect) Q_PROPERTY(int width READ width) Q_PROPERTY(qulonglong windowId READ windowId CONSTANT) // TODO: window tabs - they suck for dynamic features public: AuroraeClient(KDecorationBridge* bridge, KDecorationFactory* factory); virtual ~AuroraeClient(); virtual void activeChange(); virtual void borders(int& left, int& right, int& top, int& bottom) const; virtual void captionChange(); virtual void desktopChange(); virtual void iconChange(); virtual void init(); virtual void maximizeChange(); virtual QSize minimumSize() const; virtual Position mousePosition(const QPoint& p) const; virtual void resize(const QSize& s); virtual void shadeChange(); // optional overrides virtual void padding(int &left, int &right, int &top, int &bottom) const; virtual void reset(long unsigned int changed); Q_SIGNALS: void activeChanged(); void captionChanged(); void desktopChanged(); void iconChanged(); void maximizeChanged(); void shadeChanged(); void keepAboveChanged(); void keepBelowChanged(); private slots: void menuClicked(); void toggleShade(); void slotKeepAboveChanged(bool above); void slotKeepBelowChanged(bool below); void toggleKeepAbove(); void toggleKeepBelow(); void titlePressed(Qt::MouseButton button, Qt::MouseButtons buttons); void titleReleased(Qt::MouseButton button, Qt::MouseButtons buttons); void titleMouseMoved(Qt::MouseButton button, Qt::MouseButtons buttons); void tabMouseButtonPress(QGraphicsSceneMouseEvent *e, int index); void tabMouseButtonRelease(QGraphicsSceneMouseEvent *e, int index); void tabRemoved(int index); void tabMoved(int index, int before); void tabMovedToGroup(long int uid, int before); protected: virtual bool eventFilter(QObject *o, QEvent *e); private: void updateWindowShape(); void checkTabs(bool force = false); AuroraeScene *m_scene; QDeclarativeView *m_view; bool m_clickInProgress; }; } #endif