diff options
Diffstat (limited to 'twin/clients/b2/b2client.h')
-rw-r--r-- | twin/clients/b2/b2client.h | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/twin/clients/b2/b2client.h b/twin/clients/b2/b2client.h new file mode 100644 index 000000000..30220b175 --- /dev/null +++ b/twin/clients/b2/b2client.h @@ -0,0 +1,167 @@ +/* + * B-II KWin Client + * + * Changes: + * Customizable button positions by Karol Szwed <gallium@kde.org> + * Ported to the trinity.2 API by Luciano Montanaro <mikelima@cirulla.net> + */ + +#ifndef __B2CLIENT_H +#define __B2CLIENT_H + +#include <tqvariant.h> +#include <tqdatetime.h> +#include <tqbutton.h> +#include <tqbitmap.h> +#include <kpixmap.h> +#include <kdecoration.h> +#include <kdecorationfactory.h> + +class TQSpacerItem; +class TQBoxLayout; +class TQGridLayout; + +namespace B2 { + +class B2Client; + +class B2Button : public TQButton +{ +public: + B2Button(B2Client *_client=0, TQWidget *parent=0, const TQString& tip=NULL, const int realizeBtns = Qt::LeftButton); + ~B2Button() {}; + + void setBg(const TQColor &c){bg = c;} + void setPixmaps(KPixmap *pix, KPixmap *pixDown, KPixmap *iPix, + KPixmap *iPixDown); + void setPixmaps(int button_id); + void setToggle(){setToggleType(Toggle);} + void setActive(bool on){setOn(on);} + void setUseMiniIcon(){useMiniIcon = true;} + TQSize sizeHint() const; + TQSizePolicy sizePolicy() const; +protected: + virtual void drawButton(TQPainter *p); + void drawButtonLabel(TQPainter *){;} + + void mousePressEvent( TQMouseEvent* e ); + void mouseReleaseEvent( TQMouseEvent* e ); +private: + void enterEvent(TQEvent *e); + void leaveEvent(TQEvent *e); + + bool useMiniIcon; + KPixmap *icon[6]; + TQColor bg; //only use one color (the rest is pixmap) so forget TQPalette ;) + +public: + B2Client* client; + ButtonState last_button; + int realizeButtons; + bool hover; +}; + +class B2Titlebar : public TQWidget +{ + friend class B2Client; +public: + B2Titlebar(B2Client *parent); + ~B2Titlebar(){;} + bool isFullyObscured() const {return isfullyobscured;} + void recalcBuffer(); + TQSpacerItem *captionSpacer; +protected: + void paintEvent( TQPaintEvent* ); + bool x11Event(XEvent *e); + void mouseDoubleClickEvent( TQMouseEvent * ); + void wheelEvent(TQWheelEvent *); + void mousePressEvent( TQMouseEvent * ); + void mouseReleaseEvent( TQMouseEvent * ); + void mouseMoveEvent(TQMouseEvent *); + void resizeEvent(TQResizeEvent *ev); +private: + void drawTitlebar(TQPainter &p, bool state); + + B2Client *client; + TQString oldTitle; + KPixmap titleBuffer; + TQPoint moveOffset; + bool set_x11mask; + bool isfullyobscured; + bool shift_move; +}; + +class B2Client : public KDecoration +{ + Q_OBJECT + friend class B2Titlebar; +public: + B2Client(KDecorationBridge *b, KDecorationFactory *f); + ~B2Client(){;} + void init(); + void unobscureTitlebar(); + void titleMoveAbs(int new_ofs); + void titleMoveRel(int xdiff); + // transparent stuff + virtual bool drawbound(const TQRect& geom, bool clear); +protected: + void resizeEvent( TQResizeEvent* ); + void paintEvent( TQPaintEvent* ); + void showEvent( TQShowEvent* ); + void windowWrapperShowEvent( TQShowEvent* ); + void captionChange(); + void desktopChange(); + void shadeChange(); + void activeChange(); + void maximizeChange(); + void iconChange(); + void doShape(); + Position mousePosition( const TQPoint& p ) const; + void resize(const TQSize&); + void borders(int &, int &, int &, int &) const; + TQSize minimumSize() const; + bool eventFilter(TQObject *, TQEvent *); +private slots: + void menuButtonPressed(); + //void slotReset(); + void maxButtonClicked(); + void shadeButtonClicked(); + void resizeButtonPressed(); +private: + void addButtons(const TQString& s, const TQString tips[], + B2Titlebar* tb, TQBoxLayout* titleLayout); + void positionButtons(); + void calcHiddenButtons(); + bool mustDrawHandle() const; + bool isModalSystemNotification(); + + enum ButtonType{BtnMenu=0, BtnSticky, BtnIconify, BtnMax, BtnClose, + BtnHelp, BtnShade, BtnResize, BtnCount}; + B2Button* button[BtnCount]; + TQGridLayout *g; + // Border spacers + TQSpacerItem *topSpacer; + TQSpacerItem *bottomSpacer; + TQSpacerItem *leftSpacer; + TQSpacerItem *rightSpacer; + B2Titlebar *titlebar; + int bar_x_ofs; + int in_unobs; + TQTime time; + bool resizable; +}; + +class B2ClientFactory : public TQObject, public KDecorationFactory +{ +public: + B2ClientFactory(); + virtual ~B2ClientFactory(); + virtual KDecoration *createDecoration(KDecorationBridge *); + virtual bool reset(unsigned long changed); + virtual bool supports( Ability ability ); + TQValueList< B2ClientFactory::BorderSize > borderSizes() const; +}; + +} + +#endif |