X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fgraphicalui.h;h=88d94fe9a29657a1c0df8a1a3b6869d2a269e98f;hp=55dfd069fcc1882304684fd874ae6c3736e96557;hb=74a5ad0fb62894e054dabbad11c9ad9dad4941ec;hpb=a540a0285feef171e16fd6225b0e045fc5fc52e4 diff --git a/src/uisupport/graphicalui.h b/src/uisupport/graphicalui.h index 55dfd069..88d94fe9 100644 --- a/src/uisupport/graphicalui.h +++ b/src/uisupport/graphicalui.h @@ -23,26 +23,96 @@ #include "abstractui.h" +class ActionCollection; class ContextMenuActionProvider; +class ToolBarActionProvider; +class UiStyle; + +#ifdef Q_WS_WIN +# include +#endif class GraphicalUi : public AbstractUi { Q_OBJECT public: GraphicalUi(QObject *parent = 0); + virtual void init(); + + //! Access global ActionCollections. + /** These ActionCollections are associated with the main window, i.e. they contain global + * actions (and thus, shortcuts). Widgets providing application-wide shortcuts should + * create appropriate Action objects using GraphicalUi::actionCollection(cat)->add\(). + * @param category The category (default: "General") + */ + static ActionCollection *actionCollection(const QString &category = "General"); inline static ContextMenuActionProvider *contextMenuActionProvider(); + inline static ToolBarActionProvider *toolBarActionProvider(); + inline static UiStyle *uiStyle(); + inline static QWidget *mainWidget(); + + //! Force the main widget to the front and focus it (may not work in all window systems) + static void activateMainWidget(); + + //! Hide main widget (storing the current desktop if possible) + static void hideMainWidget(); + + //! Toggle main widget + static void toggleMainWidget(); protected: + //! This is the widget we associate global actions with, typically the main window + void setMainWidget(QWidget *); + + //! Check if the mainWidget is visible and optionally toggle its visibility + /** With KDE integration, we check if the mainWidget is (partially) obscured in order to determine if + * it should be activated or hidden. Without KDE, we need to resort to checking the current state + * as Qt knows it, ignoring windows covering it. + * @param performToggle If true, toggle the window's state in addition to checking visibility + * @return True, if the window is currently visible + */ + bool checkMainWidgetVisibility(bool performToggle); + + //! Minimize to or restore main widget + virtual void minimizeRestore(bool show); + + //! Whether it is allowed to hide the mainWidget + /** The default implementation returns false, meaning that we won't hide the mainWidget even + * if requested. This is to prevent hiding in case we don't have a tray icon to restore from. + */ + virtual inline bool isHidingMainWidgetAllowed() const; + void setContextMenuActionProvider(ContextMenuActionProvider *); + void setToolBarActionProvider(ToolBarActionProvider *); + void setUiStyle(UiStyle *); + + virtual bool eventFilter(QObject *obj, QEvent *event); private: + static inline GraphicalUi *instance(); + + static GraphicalUi *_instance; + static QWidget *_mainWidget; + static QHash _actionCollections; static ContextMenuActionProvider *_contextMenuActionProvider; + static ToolBarActionProvider *_toolBarActionProvider; + static UiStyle *_uiStyle; + static bool _onAllDesktops; + +#ifdef Q_WS_WIN + DWORD _dwTickCount; +#endif }; -ContextMenuActionProvider *GraphicalUi::contextMenuActionProvider() { - return _contextMenuActionProvider; -} +// inlines + +GraphicalUi *GraphicalUi::instance() { return _instance; } +ContextMenuActionProvider *GraphicalUi::contextMenuActionProvider() { return _contextMenuActionProvider; } +ToolBarActionProvider *GraphicalUi::toolBarActionProvider() { return _toolBarActionProvider; } +UiStyle *GraphicalUi::uiStyle() { return _uiStyle; } +QWidget *GraphicalUi::mainWidget() { return _mainWidget; } +bool GraphicalUi::isHidingMainWidgetAllowed() const { return false; } #endif