/***************************************************************** twin - the TDE window manager Copyright (C) 1999, 2000 Matthias Ettrich ******************************************************************/ #ifndef STDCLIENT_H #define STDCLIENT_H #include #include #include #include #include class TQLabel; class TQSpacerItem; namespace TDE1 { enum ButtonType { ButtonMenu=0, ButtonSticky, ButtonMinimize, ButtonMaximize, ButtonClose, ButtonHelp, ButtonTypeCount }; class StdClient : public KDecoration { TQ_OBJECT public: StdClient( KDecorationBridge* b, KDecorationFactory* f ); ~StdClient(); void init(); TQSize minimumSize() const; void borders( int& left, int& right, int& top, int& bottom ) const; void reset( unsigned long mask ); void resize( const TQSize& s ); void shadeChange() {}; Position mousePosition( const TQPoint& p ) const { return KDecoration::mousePosition( p ); } protected: bool eventFilter( TQObject* o, TQEvent* e ); void resizeEvent( TQResizeEvent* ); void paintEvent( TQPaintEvent* ); void mouseDoubleClickEvent( TQMouseEvent * ); void wheelEvent( TQWheelEvent * ); void captionChange(); void iconChange(); void maximizeChange(); void desktopChange(); void activeChange(); private: void addButtons(TQBoxLayout* hb, const TQString& buttons); private slots: void menuButtonPressed(); void maxButtonClicked( ButtonState ); private: TQToolButton* button[ButtonTypeCount]; TQSpacerItem* titlebar; }; class StdToolClient : public KDecoration { TQ_OBJECT public: StdToolClient( KDecorationBridge* b, KDecorationFactory* f ); ~StdToolClient(); void init(); TQSize minimumSize() const; void borders( int& left, int& right, int& top, int& bottom ) const; void reset( unsigned long mask ); void resize( const TQSize& s ); void shadeChange() {}; void activeChange() {}; void iconChange() {}; void maximizeChange() {}; void desktopChange() {}; Position mousePosition( const TQPoint& p ) const { return KDecoration::mousePosition( p ); } protected: bool eventFilter( TQObject* o, TQEvent* e ); void resizeEvent( TQResizeEvent* ); void paintEvent( TQPaintEvent* ); void mouseDoubleClickEvent( TQMouseEvent * ); void wheelEvent( TQWheelEvent * ); void captionChange(); private: TQToolButton* closeBtn; TQSpacerItem* titlebar; }; /* Like TQToolButton, but provides a clicked(ButtonState) signals that has the last pressed mouse button as argument */ class ThreeButtonButton: public TQToolButton { TQ_OBJECT public: ThreeButtonButton ( TQWidget *parent = 0, const char* name = 0 ) : TQToolButton( parent, name ) { connect( this, TQ_SIGNAL( clicked() ), this, TQ_SLOT( handleClicked() ) ); setCursor( arrowCursor ); } ~ThreeButtonButton () {} signals: void clicked( ButtonState ); protected: void mousePressEvent( TQMouseEvent* e ) { last_button = e->button(); TQMouseEvent me ( e->type(), e->pos(), e->globalPos(), TQt::LeftButton, e->state() ); TQToolButton::mousePressEvent( &me ); } void mouseReleaseEvent( TQMouseEvent* e ) { TQMouseEvent me ( e->type(), e->pos(), e->globalPos(), TQt::LeftButton, e->state() ); TQToolButton::mouseReleaseEvent( &me ); } private slots: void handleClicked() { emit clicked( last_button ); } private: ButtonState last_button; }; class StdFactory : public KDecorationFactory { public: StdFactory(); ~StdFactory(); KDecoration* createDecoration( KDecorationBridge* b ); bool reset( unsigned long mask ); virtual bool supports( Ability ability ); }; } #endif