]> 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 fb65506bc58260ed9181d592ab12ae29abaab997..24d11e3137faa0edcef2ca51025cbb50d11df0c9 100644 (file)
 #ifndef GUITOOLBAR_H
 #define GUITOOLBAR_H
 
-#include "Session.h"
-
 #include <QList>
 #include <QToolBar>
 #include <QToolButton>
 
+#include "support/strfwd.h"
+
+class QSettings;
+
 namespace lyx {
 
 class DocumentClass;
@@ -38,32 +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);
-       ///
-       void mousePressEvent(QMouseEvent * e);
+       MenuButtonBase(GuiToolbar * bar, ToolbarItem const & item);
 
-private:
+protected:
+       ///
+       virtual void initialize() = 0;
        ///
        GuiToolbar * bar_;
        ///
        ToolbarItem const & tbitem_;
-       ///
-       bool initialized_;
 
-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
 {
@@ -72,6 +122,10 @@ public:
        ///
        GuiToolbar(ToolbarInfo const &, GuiView &);
 
+       /// Reimplemented from QToolbar to detect whether the
+       /// toolbar is restored with MainWindow::restoreState().
+       void setVisible(bool visible);
+
        ///
        void setVisibility(int visibility);
 
@@ -84,22 +138,29 @@ public:
         **/
        QString sessionKey() const;
        /// Save session settings.
-       void saveSession() const;
+       void saveSession(QSettings & settings) const;
        /// Restore session settings.
        void restoreSession();
 
+       ///
+       bool isRestored() const;
+
        /// Refresh the contents of the bar.
-       void update(bool in_math, bool in_table, bool review,
-               bool in_mathmacrotemplate, bool in_ipa);
+       void update(int context = 0);
 
        ///
        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:
        ///
@@ -125,6 +186,8 @@ private:
        ToolbarInfo const & tbinfo_;
        ///
        bool filled_;
+       ///
+       bool restored_;
 };
 
 } // namespace frontend