]> 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 7751474d3f842a468f1584c1b3ac176293edb58a..24d11e3137faa0edcef2ca51025cbb50d11df0c9 100644 (file)
@@ -4,7 +4,7 @@
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
  * \author John Levon
  * \author Jean-Marc Lasgouttes
  * \author Angus Leeming
 #ifndef GUITOOLBAR_H
 #define GUITOOLBAR_H
 
-#include "GuiCommandBuffer.h"
-
-#include "Session.h"
-
 #include <QList>
 #include <QToolBar>
-#include <QComboBox>
+#include <QToolButton>
+
+#include "support/strfwd.h"
+
+class QSettings;
 
 namespace lyx {
 
-class FuncRequest;
-class ToolbarItem;
+class DocumentClass;
+class Inset;
 
 namespace frontend {
 
-class GuiViewBase;
 class Action;
+class GuiCommandBuffer;
+class GuiLayoutFilterModel;
+class GuiToolbar;
+class GuiView;
+class LayoutBox;
+class ToolbarInfo;
+class ToolbarItem;
+
+class MenuButtonBase : public QToolButton
+{
+       Q_OBJECT
+public:
+       ///
+       MenuButtonBase(GuiToolbar * bar, ToolbarItem const & item);
+
+protected:
+       ///
+       virtual void initialize() = 0;
+       ///
+       GuiToolbar * bar_;
+       ///
+       ToolbarItem const & tbitem_;
+
+protected Q_SLOTS:
+       ///
+       void actionTriggered(QAction * action);
+       ///
+       virtual void updateTriggered() = 0;
+};
 
 
-class GuiLayoutBox : public QComboBox
+class StaticMenuButton : public MenuButtonBase
 {
        Q_OBJECT
 public:
-       GuiLayoutBox(GuiViewBase &);
+       ///
+       StaticMenuButton(GuiToolbar * bar, ToolbarItem const & item,
+               bool const sticky = false);
 
-       /// select the right layout in the combobox.
-       void set(docstring const & layout);
-       /// Populate the layout combox.
-       void updateContents();
+protected:
+       ///
+       void initialize();
 
-private Q_SLOTS:
-       void selected(const QString & str);
+protected Q_SLOTS:
+       ///
+       void updateTriggered();
+};
 
-private:
-       GuiViewBase & owner_;
+
+/// 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();
 };
 
 
@@ -58,36 +119,77 @@ class GuiToolbar : public QToolBar
 {
        Q_OBJECT
 public:
-       GuiToolbar(ToolbarInfo const &, GuiViewBase &);
+       ///
+       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);
 
        /// Add a button to the bar.
        void add(ToolbarItem const & item);
-       /** update toolbar information
-       * ToolbarInfo will then be saved by session
-       */
-       void saveInfo(ToolbarSection::ToolbarInfo & info);
+
+       /// Session key.
+       /**
+        * This key must be used for any session setting.
+        **/
+       QString sessionKey() const;
+       /// Save session settings.
+       void saveSession(QSettings & settings) const;
+       /// Restore session settings.
+       void restoreSession();
+
+       ///
+       bool isRestored() const;
+
        /// Refresh the contents of the bar.
-       void updateContents();
-       GuiLayoutBox * layout() const { return layout_; }
+       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:
+       ///
        void updated();
 
 private:
-       Action * addItem(ToolbarItem const & item);
+       // load flags with saved values
+       void initFlags();
+       ///
+       void fill();
+       ///
+       void showEvent(QShowEvent *);
 
+       ///
        QList<Action *> actions_;
-       GuiViewBase & owner_;
-
-       GuiLayoutBox * layout_;
+       /// initial visibility flags
+       int visibility_;
+       ///
+       GuiView & owner_;
+       ///
        GuiCommandBuffer * command_buffer_;
+       ///
+       ToolbarInfo const & tbinfo_;
+       ///
+       bool filled_;
+       ///
+       bool restored_;
 };
 
-/// return a full path of an .png for the given action
-std::string const getIcon(FuncRequest const & f, bool unknown = true);
-
 } // namespace frontend
 } // namespace lyx