00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __container_extension_h__
00025 #define __container_extension_h__
00026
00027 #include <tqframe.h>
00028 #include <tqptrlist.h>
00029
00030 #include <kpanelextension.h>
00031 #include <dcopobject.h>
00032 #include <netwm_def.h>
00033
00034 #include "global.h"
00035 #include "appletinfo.h"
00036 #include "unhidetrigger.h"
00037 #include "extensionSettings.h"
00038
00039 class TQBoxLayout;
00040 class TQGridLayout;
00041 class TQPopupMenu;
00042 class TQTimer;
00043 class TQVBox;
00044 class QXEmbed;
00045 class HideButton;
00046 class KConfig;
00047 class KWinModule;
00048 class PopupWidgetFilter;
00049 class PanelExtensionOpMenu;
00050 class TQColor;
00051
00052 class ExtensionContainer : public QFrame
00053 {
00054 Q_OBJECT
00055
00056 public:
00057 enum UserHidden { Unhidden, LeftTop, RightBottom };
00058 enum HideMode { ManualHide, AutomaticHide, BackgroundHide };
00059
00060 ExtensionContainer(const AppletInfo& info,
00061 const TQString& extensionId,
00062 TQWidget *parent = 0);
00063 ExtensionContainer(KPanelExtension* extension,
00064 const AppletInfo& info,
00065 const TQString& extensionId,
00066 TQWidget *parent = 0);
00067 virtual ~ExtensionContainer();
00068
00069 virtual TQSize sizeHint(KPanelExtension::Position, const TQSize &maxSize) const;
00070
00071 const AppletInfo& info() const { return _info; }
00072
00073 TQString extensionId() const { return _id; }
00074
00075 void readConfig();
00076 void writeConfig();
00077
00078 virtual TQString panelId() const { return extensionId(); }
00079
00080 virtual void about();
00081 virtual void help();
00082 virtual void preferences();
00083 virtual void reportBug();
00084
00085 void removeSessionConfigFile();
00086
00087 KPanelExtension::Orientation orientation() const;
00088 KPanelExtension::Position position() const;
00089 void setPosition(KPanelExtension::Position p) { arrange( p, alignment(), xineramaScreen() ); }
00090
00091 int xineramaScreen() const;
00092 void setXineramaScreen(int screen);
00093
00094 void setResizeableHandle( bool resizeablehandle=true );
00095 void setHideButtons(bool showLeft, bool showRight);
00096 void setSize(KPanelExtension::Size size, int custom);
00097 KPanelExtension::Size size() const;
00098 int customSize() const { return m_settings.customSize(); }
00099 HideMode hideMode() const;
00100 void unhideIfHidden(int showForHowManyMS = 0);
00101 bool reserveStrut() const;
00102
00103 KPanelExtension::Alignment alignment() const;
00104 void setAlignment(KPanelExtension::Alignment a) { arrange( position(), a, xineramaScreen() ); }
00105
00106 TQRect currentGeometry() const;
00107 TQRect initialGeometry(KPanelExtension::Position p, KPanelExtension::Alignment a,
00108 int XineramaScreen, bool autoHidden = false,
00109 UserHidden userHidden = Unhidden) const;
00110
00111 bool eventFilter( TQObject *, TQEvent * );
00112
00113 int panelOrder() const { return m_panelOrder; }
00114 void setPanelOrder(int order) { m_panelOrder = order; }
00115
00116 signals:
00117 void removeme(ExtensionContainer*);
00118
00119 protected slots:
00120 virtual void showPanelMenu( const TQPoint& pos );
00121 void moveMe();
00122 void updateLayout();
00123 void actuallyUpdateLayout();
00124 void enableMouseOverEffects();
00125 void updateHighlightColor();
00126
00127 protected:
00128 bool event(TQEvent*);
00129 void closeEvent( TQCloseEvent* e );
00130 void paintEvent(TQPaintEvent*);
00131 void leaveEvent(TQEvent*);
00132
00133 void arrange(KPanelExtension::Position p, KPanelExtension::Alignment a, int XineramaScreen);
00134 bool autoHidden() const { return _autoHidden; };
00135 UserHidden userHidden() const { return _userHidden; };
00136 void resetLayout();
00137 bool needsBorder() const;
00138
00139 private slots:
00140 void unhideTriggered( UnhideTrigger::Trigger t, int XineramaScreen );
00141 void autoHideTimeout();
00142 void hideLeft();
00143 void hideRight();
00144 void autoHide(bool hide);
00145 void animatedHide(bool left);
00146 void updateWindowManager();
00147 void currentDesktopChanged(int);
00148 void strutChanged();
00149 void blockUserInput( bool block );
00150 void maybeStartAutoHideTimer();
00151 void stopAutoHideTimer();
00152 void maintainFocus(bool);
00153
00154 private:
00155 bool shouldUnhideForTrigger(UnhideTrigger::Trigger t) const;
00156 void init();
00157 TQSize initialSize(KPanelExtension::Position p, TQRect workArea) const;
00158 TQPoint initialLocation(KPanelExtension::Position p, KPanelExtension::Alignment a,
00159 int XineramaScreen, const TQSize &s, TQRect workArea,
00160 bool autohidden = false, UserHidden userHidden = Unhidden) const;
00161 void positionChange(KPanelExtension::Position p);
00162 void alignmentChange(KPanelExtension::Alignment a);
00163 void xineramaScreenChange(int ) {}
00164 int arrangeHideButtons();
00165 int setupBorderSpace();
00166
00167 ExtensionSettings m_settings;
00168 ExtensionContainer::HideMode m_hideMode;
00169 UnhideTrigger::Trigger m_unhideTriggeredAt;
00170
00171
00172 bool _autoHidden;
00173 UserHidden _userHidden;
00174 bool _block_user_input;
00175 TQPoint _last_lmb_press;
00176 bool _is_lmb_down;
00177 bool _in_autohide;
00178
00179
00180 TQTimer *_autohideTimer;
00181 TQTimer *_updateLayoutTimer;
00182 NETExtendedStrut _strut;
00183 PopupWidgetFilter *_popupWidgetFilter;
00184
00185 TQString _id;
00186 PanelExtensionOpMenu *_opMnu;
00187 AppletInfo _info;
00188 KPanelExtension::Type _type;
00189
00190
00191 HideButton *_ltHB;
00192 HideButton *_rbHB;
00193 TQGridLayout *_layout;
00194
00195 KPanelExtension *m_extension;
00196 int m_maintainFocus;
00197 int m_panelOrder;
00198 TQColor m_highlightColor;
00199 };
00200
00201 class PopupWidgetFilter : public QObject
00202 {
00203 Q_OBJECT
00204
00205 public:
00206 PopupWidgetFilter( TQObject *parent );
00207 ~PopupWidgetFilter() {}
00208 bool eventFilter( TQObject *obj, TQEvent* e );
00209 signals:
00210 void popupWidgetHiding();
00211 };
00212
00213 typedef TQValueList<ExtensionContainer*> ExtensionList;
00214
00215 #endif