* 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 "Session.h"
-
-#include <QAbstractProxyModel>
-#include <QComboBox>
#include <QList>
#include <QToolBar>
+#include <QToolButton>
+
+#include "support/strfwd.h"
-class QSortFilterProxyModel;
-class QStandardItemModel;
+class QSettings;
namespace lyx {
class GuiLayoutFilterModel;
class GuiToolbar;
class GuiView;
-class LayoutItemDelegate;
+class LayoutBox;
class ToolbarInfo;
class ToolbarItem;
-class GuiLayoutBox : public QComboBox
+class MenuButtonBase : public QToolButton
{
Q_OBJECT
public:
- GuiLayoutBox(GuiToolbar * bar, GuiView &);
-
- /// select the right layout in the combobox.
- void set(docstring const & layout);
- /// Populate the layout combobox.
- void updateContents(bool reset);
- /// Add Item to Layout box according to sorting settings from preferences
- void addItemSort(docstring const & item, docstring const & category,
- bool sorted, bool sortedByCat);
+ ///
+ MenuButtonBase(GuiToolbar * bar, ToolbarItem const & item);
+protected:
///
- void showPopup();
-
+ virtual void initialize() = 0;
///
- bool eventFilter(QObject * o, QEvent * e);
+ GuiToolbar * bar_;
///
- QString const & filter() { return filter_; }
+ ToolbarItem const & tbitem_;
-private Q_SLOTS:
+protected Q_SLOTS:
///
- void selected(int index);
+ void actionTriggered(QAction * action);
///
- void setIconSize(QSize size);
+ virtual void updateTriggered() = 0;
+};
-private:
- friend class LayoutItemDelegate;
+class StaticMenuButton : public MenuButtonBase
+{
+ Q_OBJECT
+public:
///
- void resetFilter();
- ///
- void setFilter(QString const & s);
- ///
- QString charFilterRegExp(QString const & filter);
+ StaticMenuButton(GuiToolbar * bar, ToolbarItem const & item,
+ bool const sticky = false);
+
+protected:
///
- void countCategories();
-
+ void initialize();
+
+protected Q_SLOTS:
///
- GuiView & owner_;
+ 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:
///
- GuiToolbar * bar_;
+ DynamicMenuButton(GuiToolbar * bar, ToolbarItem const & item);
///
- DocumentClass const * text_class_;
+ ~DynamicMenuButton();
///
- Inset const * inset_;
-
- /// the layout model: 1st column translated, 2nd column raw layout name
- QStandardItemModel * model_;
- /// the proxy model filtering \c model_
- GuiLayoutFilterModel * filterModel_;
- /// the (model-) index of the last successful selection
- int lastSel_;
- /// the character filter
- QString filter_;
+ static bool isMenuType(std::string const & s);
+protected:
///
- LayoutItemDelegate * layoutItemDelegate_;
+ void initialize();
///
- unsigned visibleCategories_;
+ void loadFlexInsets();
+ /// pimpl so we don't have to include big files
+ class Private;
+ Private * d;
+protected Q_SLOTS:
///
- bool inShowPopup_;
+ void updateTriggered();
};
///
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:
///
// load flags with saved values
void initFlags();
///
- QString name_;
+ void fill();
+ ///
+ void showEvent(QShowEvent *);
+
///
QList<Action *> actions_;
/// initial visibility flags
int visibility_;
///
- bool allowauto_;
- ///
GuiView & owner_;
///
- GuiLayoutBox * layout_;
- ///
GuiCommandBuffer * command_buffer_;
+ ///
+ ToolbarInfo const & tbinfo_;
+ ///
+ bool filled_;
+ ///
+ bool restored_;
};
} // namespace frontend