* 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 "frontends/Toolbars.h"
-#include "Session.h"
-
+#include <QList>
#include <QToolBar>
+#include <QToolButton>
-#include <boost/scoped_ptr.hpp>
-
-#include <vector>
+#include "support/strfwd.h"
-class QComboBox;
+class QSettings;
namespace lyx {
-class FuncRequest;
+class DocumentClass;
+class Inset;
namespace frontend {
-class GuiCommandBuffer;
-class GuiLayoutBox;
-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 QObject, public LayoutBox {
+
+class StaticMenuButton : public MenuButtonBase
+{
Q_OBJECT
public:
- GuiLayoutBox(QToolBar *, GuiViewBase &);
+ ///
+ StaticMenuButton(GuiToolbar * bar, ToolbarItem const & item,
+ bool const sticky = false);
- /// select the right layout in the combox.
- void set(docstring const & layout);
- /// Populate the layout combox.
- void update();
- /// Erase the layout list.
- void clear();
- /// Display the layout list.
- void open();
+protected:
///
- void setEnabled(bool);
+ void initialize();
-private Q_SLOTS:
- void selected(const QString & str);
+protected Q_SLOTS:
+ ///
+ void updateTriggered();
+};
-private:
- QComboBox * combo_;
- 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();
};
-class GuiToolbar : public QToolBar, public Toolbar {
+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);
- //~GuiToolbar();
+ ///
+ void setVisibility(int visibility);
+ /// Add a button to the bar.
void add(ToolbarItem const & item);
- void hide(bool);
- void show(bool);
- bool isVisible() const;
- void saveInfo(ToolbarSection::ToolbarInfo & info);
- void update();
- LayoutBox * layout() const { return layout_.get(); }
+
+ /// 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 update(int context = 0);
+
+ ///
+ void toggle();
+
+ /// toggles movability
+ void movable(bool silent = false);
+
+ ///
+ GuiCommandBuffer * commandBuffer() { return command_buffer_; }
+
///
- void focusCommandBuffer();
+ Action * addItem(ToolbarItem const & item);
+ ///
+ GuiView const & owner() { return owner_; }
Q_SIGNALS:
+ ///
void updated();
private:
- GuiCommandBuffer * command_buffer_;
-
- std::vector<Action *> ActionVector;
- GuiViewBase & owner_;
+ // load flags with saved values
+ void initFlags();
+ ///
+ void fill();
+ ///
+ void showEvent(QShowEvent *);
- boost::scoped_ptr<GuiLayoutBox> layout_;
+ ///
+ QList<Action *> actions_;
+ /// initial visibility flags
+ int visibility_;
+ ///
+ GuiView & owner_;
+ ///
+ GuiCommandBuffer * command_buffer_;
+ ///
+ ToolbarInfo const & tbinfo_;
+ ///
+ bool filled_;
+ ///
+ bool restored_;
};
-/// return a full path of an XPM for the given action
-std::string const getIcon(FuncRequest const & f, bool unknown = true);
-
} // namespace frontend
} // namespace lyx