kwin Library API Documentation

b2client.h

00001 /*
00002  * B-II KWin Client
00003  *
00004  * Changes:
00005  *  Customizable button positions by Karol Szwed <gallium@kde.org>
00006  *  Ported to the kde3.2 API by Luciano Montanaro <mikelima@cirulla.net>
00007  */
00008 
00009 #ifndef __B2CLIENT_H
00010 #define __B2CLIENT_H
00011 
00012 #include <qvariant.h>
00013 #include <qdatetime.h>
00014 #include <qbutton.h>
00015 #include <qbitmap.h>
00016 #include <kpixmap.h>
00017 #include <kdecoration.h>
00018 #include <kdecorationfactory.h>
00019 
00020 class QSpacerItem;
00021 class QBoxLayout;
00022 class QGridLayout;
00023 
00024 namespace B2 {
00025 
00026 class B2Client;
00027 
00028 class B2Button : public QButton
00029 {
00030 public:
00031     B2Button(B2Client *_client=0, QWidget *parent=0, const QString& tip=NULL, const int realizeBtns = LeftButton);
00032     ~B2Button() {};
00033 
00034     void setBg(const QColor &c){bg = c;}
00035     void setPixmaps(KPixmap *pix, KPixmap *pixDown, KPixmap *iPix,
00036                     KPixmap *iPixDown);
00037     void setPixmaps(int button_id);
00038     void setToggle(){setToggleType(Toggle);}
00039     void setActive(bool on){setOn(on);}
00040     void setUseMiniIcon(){useMiniIcon = true;}
00041     QSize sizeHint() const;
00042     QSizePolicy sizePolicy() const;
00043 protected:
00044     virtual void drawButton(QPainter *p);
00045     void drawButtonLabel(QPainter *){;}
00046 
00047     void mousePressEvent( QMouseEvent* e );
00048     void mouseReleaseEvent( QMouseEvent* e );
00049 private:
00050     void enterEvent(QEvent *e);
00051     void leaveEvent(QEvent *e);
00052     
00053     bool useMiniIcon;
00054     KPixmap *icon[6];
00055     QColor bg; //only use one color (the rest is pixmap) so forget QPalette ;)
00056 
00057 public:
00058     B2Client* client;
00059     ButtonState last_button;
00060     int realizeButtons;
00061     bool hover;
00062 };
00063 
00064 class B2Titlebar : public QWidget
00065 {
00066     friend class B2Client;
00067 public:
00068     B2Titlebar(B2Client *parent);
00069     ~B2Titlebar(){;}
00070     bool isFullyObscured() const {return isfullyobscured;}
00071     void recalcBuffer();
00072     QSpacerItem *captionSpacer;
00073 protected:
00074     void paintEvent( QPaintEvent* );
00075     bool x11Event(XEvent *e);
00076     void mouseDoubleClickEvent( QMouseEvent * );
00077     void mousePressEvent( QMouseEvent * );
00078     void mouseReleaseEvent( QMouseEvent * );
00079     void mouseMoveEvent(QMouseEvent *);
00080     void resizeEvent(QResizeEvent *ev);
00081 private:
00082     void drawTitlebar(QPainter &p, bool state);
00083 
00084     B2Client *client;
00085     QString oldTitle;
00086     KPixmap titleBuffer;
00087     QPoint moveOffset;
00088     bool set_x11mask;
00089     bool isfullyobscured;
00090     bool shift_move;
00091 };
00092 
00093 class B2Client : public KDecoration
00094 {
00095     Q_OBJECT
00096     friend class B2Titlebar;
00097 public:
00098     B2Client(KDecorationBridge *b, KDecorationFactory *f);
00099     ~B2Client(){;}
00100     void init();
00101     void unobscureTitlebar();
00102     void titleMoveAbs(int new_ofs);
00103     void titleMoveRel(int xdiff);
00104     // transparent stuff
00105     virtual bool drawbound(const QRect& geom, bool clear);
00106 protected:
00107     void resizeEvent( QResizeEvent* );
00108     void paintEvent( QPaintEvent* );
00109     void showEvent( QShowEvent* );
00110     void windowWrapperShowEvent( QShowEvent* );
00111     void captionChange();
00112     void desktopChange();
00113     void shadeChange();
00114     void activeChange();
00115     void maximizeChange();
00116     void iconChange();
00117     void doShape();
00118     Position mousePosition( const QPoint& p ) const;
00119     void resize(const QSize&);
00120     void borders(int &, int &, int &, int &) const;
00121     QSize minimumSize() const;
00122     bool eventFilter(QObject *, QEvent *);
00123 private slots:
00124     void menuButtonPressed();
00125     //void slotReset();
00126     void maxButtonClicked();
00127     void shadeButtonClicked();
00128     void resizeButtonPressed();
00129 private:
00130     void addButtons(const QString& s, const QString tips[],
00131                     B2Titlebar* tb, QBoxLayout* titleLayout);
00132     void positionButtons();
00133     void calcHiddenButtons();
00134     bool mustDrawHandle() const;
00135     
00136     enum ButtonType{BtnMenu=0, BtnSticky, BtnIconify, BtnMax, BtnClose,
00137         BtnHelp, BtnShade, BtnResize, BtnCount};
00138     B2Button* button[BtnCount];
00139     QGridLayout *g;
00140     QSpacerItem *spacer; // Bottom border spacer
00141     QSpacerItem *leftSpacer;
00142     QSpacerItem *rightSpacer;
00143     B2Titlebar *titlebar;
00144     int bar_x_ofs;
00145     int in_unobs;
00146     QTime time;
00147     bool resizable;
00148 };
00149 
00150 class B2ClientFactory : public QObject, public KDecorationFactory
00151 {
00152 public:
00153     B2ClientFactory();
00154     virtual ~B2ClientFactory();
00155     virtual KDecoration *createDecoration(KDecorationBridge *);
00156     virtual bool reset(unsigned long changed);
00157     virtual bool supports( Ability ability );
00158     QValueList< B2ClientFactory::BorderSize > borderSizes() const;
00159 };
00160 
00161 }
00162 
00163 #endif
KDE Logo
This file is part of the documentation for kwin Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Apr 6 02:41:04 2005 by doxygen 1.4.0 written by Dimitri van Heesch, © 1997-2003