]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiToolbar.h
Use <cstdint> instead of <boost/cstdint.hpp>
[lyx.git] / src / frontends / qt4 / GuiToolbar.h
index caad355bd8c401a0d95f9db9c83924730c5734b2..24d11e3137faa0edcef2ca51025cbb50d11df0c9 100644 (file)
 #include <QToolBar>
 #include <QToolButton>
 
+#include "support/strfwd.h"
+
+class QSettings;
+
 namespace lyx {
 
 class DocumentClass;
@@ -36,30 +40,80 @@ class LayoutBox;
 class ToolbarInfo;
 class ToolbarItem;
 
-class MenuButton : public QToolButton
+class MenuButtonBase : public QToolButton
 {
        Q_OBJECT
 public:
        ///
-       MenuButton(GuiToolbar * bar, ToolbarItem const & item,
-               bool const sticky = false);
+       MenuButtonBase(GuiToolbar * bar, ToolbarItem const & item);
 
-private:
+protected:
        ///
-       void initialize();
+       virtual void initialize() = 0;
        ///
        GuiToolbar * bar_;
        ///
        ToolbarItem const & tbitem_;
 
-private Q_SLOTS:
+protected Q_SLOTS:
        ///
        void actionTriggered(QAction * action);
+       ///
+       virtual void updateTriggered() = 0;
+};
+
+
+class StaticMenuButton : public MenuButtonBase
+{
+       Q_OBJECT
+public:
+       ///
+       StaticMenuButton(GuiToolbar * bar, ToolbarItem const & item,
+               bool const sticky = false);
+
+protected:
+       ///
+       void initialize();
+
+protected Q_SLOTS:
        ///
        void updateTriggered();
 };
 
 
+/// A menu which can be populated on the fly.
+/// The 'type' of menu must be given in the toolbar file
+/// (stdtoolbars.inc, usually) and must be one of:
+///            dynamic-custom-insets
+///            dynamic-char-styles
+///            textstyle-apply
+///            paste
+/// To add a new one of these, you must add a routine, like 
+/// loadFlexInsets, that will populate the menu, and call it from
+/// updateTriggered. Make sure to add the new type to isMenuType().
+class DynamicMenuButton : public MenuButtonBase
+{
+    Q_OBJECT
+public:
+       ///
+       DynamicMenuButton(GuiToolbar * bar, ToolbarItem const & item);
+       ///
+       ~DynamicMenuButton();
+       ///
+       static bool isMenuType(std::string const & s);
+protected:
+       ///
+       void initialize();
+       ///
+       void loadFlexInsets();
+       /// pimpl so we don't have to include big files
+       class Private;
+       Private * d;
+protected Q_SLOTS:
+       ///
+       void updateTriggered();
+};
+
 
 class GuiToolbar : public QToolBar
 {
@@ -67,8 +121,8 @@ class GuiToolbar : public QToolBar
 public:
        ///
        GuiToolbar(ToolbarInfo const &, GuiView &);
-       
-       /// Reimplemented from QToolbar to detect whether the 
+
+       /// Reimplemented from QToolbar to detect whether the
        /// toolbar is restored with MainWindow::restoreState().
        void setVisible(bool visible);
 
@@ -84,7 +138,7 @@ public:
         **/
        QString sessionKey() const;
        /// Save session settings.
-       void saveSession() const;
+       void saveSession(QSettings & settings) const;
        /// Restore session settings.
        void restoreSession();
 
@@ -97,11 +151,16 @@ public:
        ///
        void toggle();
 
+       /// toggles movability
+       void movable(bool silent = false);
+
        ///
        GuiCommandBuffer * commandBuffer() { return command_buffer_; }
 
        ///
        Action * addItem(ToolbarItem const & item);
+    ///
+    GuiView const & owner() { return owner_; }
 
 Q_SIGNALS:
        ///