#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;
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
+/// 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
{
///
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);
**/
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);
+ 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:
///
ToolbarInfo const & tbinfo_;
///
bool filled_;
+ ///
+ bool restored_;
};
} // namespace frontend