mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-24 01:01:57 +00:00
merge MenuBackend into frontend/Menus
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23527 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
6f1cb456cf
commit
4b12782854
@ -63,8 +63,6 @@ lyx_SOURCES = \
|
|||||||
$(ASPELL) $(PSPELL) $(ISPELL) SpellBase.cpp \
|
$(ASPELL) $(PSPELL) $(ISPELL) SpellBase.cpp \
|
||||||
Box.cpp \
|
Box.cpp \
|
||||||
Box.h \
|
Box.h \
|
||||||
MenuBackend.cpp \
|
|
||||||
MenuBackend.h \
|
|
||||||
Dimension.cpp \
|
Dimension.cpp \
|
||||||
Dimension.h \
|
Dimension.h \
|
||||||
PrinterParams.cpp \
|
PrinterParams.cpp \
|
||||||
|
1069
src/MenuBackend.cpp
1069
src/MenuBackend.cpp
File diff suppressed because it is too large
Load Diff
@ -1,261 +0,0 @@
|
|||||||
// -*- C++ -*-
|
|
||||||
/**
|
|
||||||
* \file MenuBackend.h
|
|
||||||
* This file is part of LyX, the document processor.
|
|
||||||
* Licence details can be found in the file COPYING.
|
|
||||||
*
|
|
||||||
* \author Lars Gullik Bjønnes
|
|
||||||
* \author Jean-Marc Lasgouttes
|
|
||||||
*
|
|
||||||
* Full author contact details are available in file CREDITS.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MENUBACKEND_H
|
|
||||||
#define MENUBACKEND_H
|
|
||||||
|
|
||||||
#include "FuncStatus.h"
|
|
||||||
#include "FuncRequest.h"
|
|
||||||
|
|
||||||
#include <boost/shared_ptr.hpp>
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
|
|
||||||
namespace lyx {
|
|
||||||
|
|
||||||
class Lexer;
|
|
||||||
class Buffer;
|
|
||||||
class Menu;
|
|
||||||
|
|
||||||
///
|
|
||||||
class MenuItem {
|
|
||||||
public:
|
|
||||||
/// The type of elements that can be in a menu
|
|
||||||
enum Kind {
|
|
||||||
///
|
|
||||||
Command,
|
|
||||||
///
|
|
||||||
Submenu,
|
|
||||||
///
|
|
||||||
Separator,
|
|
||||||
/** This is the list of last opened file,
|
|
||||||
typically for the File menu. */
|
|
||||||
Lastfiles,
|
|
||||||
/** This is the list of opened Documents,
|
|
||||||
typically for the Documents menu. */
|
|
||||||
Documents,
|
|
||||||
/** This is the bookmarks */
|
|
||||||
Bookmarks,
|
|
||||||
///
|
|
||||||
Toc,
|
|
||||||
/** This is a list of viewable formats
|
|
||||||
typically for the File->View menu. */
|
|
||||||
ViewFormats,
|
|
||||||
/** This is a list of updatable formats
|
|
||||||
typically for the File->Update menu. */
|
|
||||||
UpdateFormats,
|
|
||||||
/** This is a list of exportable formats
|
|
||||||
typically for the File->Export menu. */
|
|
||||||
ExportFormats,
|
|
||||||
/** This is a list of importable formats
|
|
||||||
typically for the File->Export menu. */
|
|
||||||
ImportFormats,
|
|
||||||
/** This is the list of elements available
|
|
||||||
* for insertion into document. */
|
|
||||||
CharStyles,
|
|
||||||
/** This is the list of user-configurable
|
|
||||||
insets to insert into document */
|
|
||||||
Custom,
|
|
||||||
/** This is the list of XML elements to
|
|
||||||
insert into the document */
|
|
||||||
Elements,
|
|
||||||
/** This is the list of floats that we can
|
|
||||||
insert a list for. */
|
|
||||||
FloatListInsert,
|
|
||||||
/** This is the list of floats that we can
|
|
||||||
insert. */
|
|
||||||
FloatInsert,
|
|
||||||
/** This is the list of selections that can
|
|
||||||
be pasted. */
|
|
||||||
PasteRecent,
|
|
||||||
/** toolbars */
|
|
||||||
Toolbars,
|
|
||||||
/** Available branches in document */
|
|
||||||
Branches
|
|
||||||
};
|
|
||||||
|
|
||||||
explicit MenuItem(Kind kind);
|
|
||||||
|
|
||||||
MenuItem(Kind kind,
|
|
||||||
docstring const & label,
|
|
||||||
docstring const & submenu = docstring(),
|
|
||||||
bool optional = false);
|
|
||||||
|
|
||||||
MenuItem(Kind kind,
|
|
||||||
docstring const & label,
|
|
||||||
FuncRequest const & func,
|
|
||||||
bool optional = false);
|
|
||||||
|
|
||||||
/// This one is just to please boost::shared_ptr<>
|
|
||||||
~MenuItem();
|
|
||||||
/// The label of a given menuitem
|
|
||||||
docstring const label() const;
|
|
||||||
/// The keyboard shortcut (usually underlined in the entry)
|
|
||||||
docstring const shortcut() const;
|
|
||||||
/// The complete label, with label and shortcut separated by a '|'
|
|
||||||
docstring const fulllabel() const { return label_;}
|
|
||||||
/// The kind of entry
|
|
||||||
Kind kind() const { return kind_; }
|
|
||||||
/// the action (if relevant)
|
|
||||||
FuncRequest const & func() const { return func_; }
|
|
||||||
/// returns true if the entry should be ommited when disabled
|
|
||||||
bool optional() const { return optional_; }
|
|
||||||
/// returns the status of the lfun associated with this entry
|
|
||||||
FuncStatus const & status() const { return status_; }
|
|
||||||
/// returns the status of the lfun associated with this entry
|
|
||||||
FuncStatus & status() { return status_; }
|
|
||||||
/// returns the status of the lfun associated with this entry
|
|
||||||
void status(FuncStatus const & status) { status_ = status; }
|
|
||||||
///returns the binding associated to this action.
|
|
||||||
docstring const binding() const;
|
|
||||||
/// the description of the submenu (if relevant)
|
|
||||||
docstring const & submenuname() const { return submenuname_; }
|
|
||||||
/// set the description of the submenu
|
|
||||||
void submenuname(docstring const & name) { submenuname_ = name; }
|
|
||||||
///
|
|
||||||
Menu * submenu() const { return submenu_.get(); }
|
|
||||||
///
|
|
||||||
void submenu(Menu * menu);
|
|
||||||
|
|
||||||
private:
|
|
||||||
//friend class MenuBackend;
|
|
||||||
///
|
|
||||||
Kind kind_;
|
|
||||||
///
|
|
||||||
docstring label_;
|
|
||||||
///
|
|
||||||
FuncRequest func_;
|
|
||||||
///
|
|
||||||
docstring submenuname_;
|
|
||||||
///
|
|
||||||
bool optional_;
|
|
||||||
///
|
|
||||||
FuncStatus status_;
|
|
||||||
///
|
|
||||||
boost::shared_ptr<Menu> submenu_;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
class Menu {
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
typedef std::vector<MenuItem> ItemList;
|
|
||||||
///
|
|
||||||
typedef ItemList::const_iterator const_iterator;
|
|
||||||
///
|
|
||||||
typedef ItemList::size_type size_type;
|
|
||||||
///
|
|
||||||
explicit Menu(docstring const & name = docstring()) : name_(name) {}
|
|
||||||
/// Add the menu item unconditionally
|
|
||||||
Menu & add(MenuItem const &);
|
|
||||||
/// Checks the associated FuncRequest status before adding the
|
|
||||||
/// menu item.
|
|
||||||
Menu & addWithStatusCheck(MenuItem const &);
|
|
||||||
///
|
|
||||||
Menu & read(Lexer &);
|
|
||||||
///
|
|
||||||
docstring const & name() const { return name_; }
|
|
||||||
///
|
|
||||||
bool empty() const { return items_.empty(); }
|
|
||||||
/// Clear the menu content.
|
|
||||||
void clear() { items_.clear(); }
|
|
||||||
///
|
|
||||||
ItemList::size_type size() const { return items_.size(); }
|
|
||||||
///
|
|
||||||
MenuItem const & operator[](size_type) const;
|
|
||||||
///
|
|
||||||
bool hasFunc(FuncRequest const &) const;
|
|
||||||
///
|
|
||||||
const_iterator begin() const { return items_.begin(); }
|
|
||||||
///
|
|
||||||
const_iterator end() const { return items_.end(); }
|
|
||||||
|
|
||||||
// Check whether the menu shortcuts are unique
|
|
||||||
void checkShortcuts() const;
|
|
||||||
|
|
||||||
// search for func in this menu iteratively, and put menu
|
|
||||||
// names in a stack.
|
|
||||||
bool searchMenu(FuncRequest const & func, std::vector<docstring> & names)
|
|
||||||
const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
friend class MenuBackend;
|
|
||||||
///
|
|
||||||
ItemList items_;
|
|
||||||
///
|
|
||||||
docstring name_;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
class MenuBackend {
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
typedef std::vector<Menu> MenuList;
|
|
||||||
///
|
|
||||||
typedef MenuList::const_iterator const_iterator;
|
|
||||||
///
|
|
||||||
typedef MenuList::iterator iterator;
|
|
||||||
///
|
|
||||||
MenuBackend() {}
|
|
||||||
///
|
|
||||||
void read(Lexer &);
|
|
||||||
///
|
|
||||||
void add(Menu const &);
|
|
||||||
///
|
|
||||||
bool hasMenu(docstring const &) const;
|
|
||||||
///
|
|
||||||
Menu & getMenu(docstring const &);
|
|
||||||
///
|
|
||||||
Menu const & getMenu(docstring const &) const;
|
|
||||||
///
|
|
||||||
Menu const & getMenubar() const;
|
|
||||||
///
|
|
||||||
bool empty() const { return menulist_.empty(); }
|
|
||||||
/** This defines a menu whose entries list the FuncRequests
|
|
||||||
that will be removed by expand() in other menus. This is
|
|
||||||
used by the Qt/Mac code
|
|
||||||
*/
|
|
||||||
void specialMenu(Menu const &);
|
|
||||||
///
|
|
||||||
Menu const & specialMenu() { return specialmenu_; }
|
|
||||||
|
|
||||||
/// Expands some special entries of the menu
|
|
||||||
/** The entries with the following kind are expanded to a
|
|
||||||
sequence of Command MenuItems: Lastfiles, Documents,
|
|
||||||
ViewFormats, ExportFormats, UpdateFormats, Branches
|
|
||||||
*/
|
|
||||||
void expand(Menu const & frommenu, Menu & tomenu,
|
|
||||||
Buffer const *) const;
|
|
||||||
///
|
|
||||||
const_iterator begin() const { return menulist_.begin(); }
|
|
||||||
///
|
|
||||||
iterator begin() { return menulist_.begin(); }
|
|
||||||
///
|
|
||||||
const_iterator end() const { return menulist_.end(); }
|
|
||||||
///
|
|
||||||
iterator end() { return menulist_.end(); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
///
|
|
||||||
MenuList menulist_;
|
|
||||||
///
|
|
||||||
Menu menubar_;
|
|
||||||
///
|
|
||||||
Menu specialmenu_;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace lyx
|
|
||||||
|
|
||||||
#endif // MENUBACKEND_H
|
|
@ -29,7 +29,6 @@ class FuncRequest;
|
|||||||
class FuncStatus;
|
class FuncStatus;
|
||||||
class Inset;
|
class Inset;
|
||||||
class Lexer;
|
class Lexer;
|
||||||
class MenuBackend;
|
|
||||||
struct RGBColor;
|
struct RGBColor;
|
||||||
|
|
||||||
namespace frontend {
|
namespace frontend {
|
||||||
@ -233,10 +232,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual void unregisterSocketCallback(int fd) = 0;
|
virtual void unregisterSocketCallback(int fd) = 0;
|
||||||
|
|
||||||
///
|
|
||||||
virtual MenuBackend const & menuBackend() const = 0;
|
|
||||||
virtual MenuBackend & menuBackend() = 0;
|
|
||||||
|
|
||||||
virtual bool searchMenu(FuncRequest const & func,
|
virtual bool searchMenu(FuncRequest const & func,
|
||||||
std::vector<docstring> & names) const = 0;
|
std::vector<docstring> & names) const = 0;
|
||||||
};
|
};
|
||||||
|
@ -651,14 +651,14 @@ Buffer const * GuiApplication::updateInset(Inset const * inset) const
|
|||||||
|
|
||||||
void GuiApplication::readMenus(Lexer & lex)
|
void GuiApplication::readMenus(Lexer & lex)
|
||||||
{
|
{
|
||||||
menuBackend().read(lex);
|
menus().read(lex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool GuiApplication::searchMenu(FuncRequest const & func,
|
bool GuiApplication::searchMenu(FuncRequest const & func,
|
||||||
vector<docstring> & names) const
|
vector<docstring> & names) const
|
||||||
{
|
{
|
||||||
return menuBackend().getMenubar().searchMenu(func, names);
|
return menus().getMenubar().searchMenu(func, names);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -65,8 +65,6 @@ public:
|
|||||||
virtual Clipboard & clipboard();
|
virtual Clipboard & clipboard();
|
||||||
virtual Selection & selection();
|
virtual Selection & selection();
|
||||||
virtual FontLoader & fontLoader() { return font_loader_; }
|
virtual FontLoader & fontLoader() { return font_loader_; }
|
||||||
MenuBackend const & menuBackend() const { return menus_; }
|
|
||||||
MenuBackend & menuBackend() { return menus_; }
|
|
||||||
virtual int exec();
|
virtual int exec();
|
||||||
virtual void exit(int status);
|
virtual void exit(int status);
|
||||||
virtual bool event(QEvent * e);
|
virtual bool event(QEvent * e);
|
||||||
|
@ -11,18 +11,16 @@
|
|||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
#include "GuiView.h"
|
#include "GuiPopupMenu.h"
|
||||||
|
|
||||||
#include "Action.h"
|
#include "Action.h"
|
||||||
#include "GuiApplication.h"
|
#include "GuiApplication.h"
|
||||||
#include "GuiPopupMenu.h"
|
#include "GuiView.h"
|
||||||
#include "qt_helpers.h"
|
#include "qt_helpers.h"
|
||||||
|
|
||||||
#include "LyXFunc.h"
|
#include "LyXFunc.h"
|
||||||
#include "MenuBackend.h"
|
|
||||||
|
|
||||||
#include "support/debug.h"
|
#include "support/debug.h"
|
||||||
#include "support/lstrings.h"
|
|
||||||
|
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
namespace frontend {
|
namespace frontend {
|
||||||
@ -31,7 +29,7 @@ GuiPopupMenu::GuiPopupMenu(GuiView * owner, MenuItem const & mi,
|
|||||||
bool topLevelMenu)
|
bool topLevelMenu)
|
||||||
: QMenu(owner), owner_(owner)
|
: QMenu(owner), owner_(owner)
|
||||||
{
|
{
|
||||||
name_ = toqstr(mi.submenuname());
|
name_ = mi.submenuname();
|
||||||
|
|
||||||
setTitle(label(mi));
|
setTitle(label(mi));
|
||||||
|
|
||||||
@ -53,13 +51,13 @@ void GuiPopupMenu::updateView()
|
|||||||
// Here, We make sure that theLyXFunc points to the correct LyXView.
|
// Here, We make sure that theLyXFunc points to the correct LyXView.
|
||||||
theLyXFunc().setLyXView(owner_);
|
theLyXFunc().setLyXView(owner_);
|
||||||
|
|
||||||
MenuBackend const & menubackend = guiApp->menuBackend();
|
Menus const & menus = guiApp->menus();
|
||||||
Menu const & fromLyxMenu = menubackend.getMenu(qstring_to_ucs4(name_));
|
Menu const & fromLyxMenu = menus.getMenu(name_);
|
||||||
menubackend.expand(fromLyxMenu, topLevelMenu_, owner_->buffer());
|
menus.expand(fromLyxMenu, topLevelMenu_, owner_->buffer());
|
||||||
|
|
||||||
if (!menubackend.hasMenu(topLevelMenu_.name())) {
|
if (!menus.hasMenu(topLevelMenu_.name())) {
|
||||||
LYXERR(Debug::GUI, "\tWARNING: menu seems empty"
|
LYXERR(Debug::GUI, "\tWARNING: menu seems empty"
|
||||||
<< to_utf8(topLevelMenu_.name()));
|
<< fromqstr(topLevelMenu_.name()));
|
||||||
}
|
}
|
||||||
populate(this, &topLevelMenu_);
|
populate(this, &topLevelMenu_);
|
||||||
}
|
}
|
||||||
@ -67,9 +65,9 @@ void GuiPopupMenu::updateView()
|
|||||||
|
|
||||||
void GuiPopupMenu::populate(QMenu * qMenu, Menu * menu)
|
void GuiPopupMenu::populate(QMenu * qMenu, Menu * menu)
|
||||||
{
|
{
|
||||||
LYXERR(Debug::GUI, "populating menu " << to_utf8(menu->name()));
|
LYXERR(Debug::GUI, "populating menu " << fromqstr(menu->name()));
|
||||||
if (menu->size() == 0) {
|
if (menu->size() == 0) {
|
||||||
LYXERR(Debug::GUI, "\tERROR: empty menu " << to_utf8(menu->name()));
|
LYXERR(Debug::GUI, "\tERROR: empty menu " << fromqstr(menu->name()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
LYXERR(Debug::GUI, " ***** menu entries " << menu->size());
|
LYXERR(Debug::GUI, " ***** menu entries " << menu->size());
|
||||||
@ -94,9 +92,9 @@ void GuiPopupMenu::populate(QMenu * qMenu, Menu * menu)
|
|||||||
} else { // we have a MenuItem::Command
|
} else { // we have a MenuItem::Command
|
||||||
|
|
||||||
LYXERR(Debug::GUI, "creating Menu Item "
|
LYXERR(Debug::GUI, "creating Menu Item "
|
||||||
<< to_utf8(m->label()));
|
<< fromqstr(m->label()));
|
||||||
|
|
||||||
Action * action = new Action(*(owner_),
|
Action * action = new Action(*owner_,
|
||||||
QIcon(), label(*m), m->func(), QString());
|
QIcon(), label(*m), m->func(), QString());
|
||||||
qMenu->addAction(action);
|
qMenu->addAction(action);
|
||||||
}
|
}
|
||||||
@ -106,21 +104,22 @@ void GuiPopupMenu::populate(QMenu * qMenu, Menu * menu)
|
|||||||
|
|
||||||
QString GuiPopupMenu::label(MenuItem const & mi) const
|
QString GuiPopupMenu::label(MenuItem const & mi) const
|
||||||
{
|
{
|
||||||
docstring label = support::subst(mi.label(),
|
QString label = mi.label();
|
||||||
from_ascii("&"), from_ascii("&&"));
|
label.replace("&", "&&");
|
||||||
|
|
||||||
docstring const shortcut = mi.shortcut();
|
QString shortcut = mi.shortcut();
|
||||||
if (!shortcut.empty()) {
|
if (!shortcut.isEmpty()) {
|
||||||
size_t pos = label.find(shortcut);
|
int pos = label.indexOf(shortcut);
|
||||||
if (pos != docstring::npos)
|
if (pos != -1)
|
||||||
label.insert(pos, 1, char_type('&'));
|
//label.insert(pos, 1, char_type('&'));
|
||||||
|
label.replace(pos, 0, "&");
|
||||||
}
|
}
|
||||||
|
|
||||||
docstring const binding = mi.binding();
|
QString const binding = mi.binding();
|
||||||
if (!binding.empty())
|
if (!binding.isEmpty())
|
||||||
label += '\t' + binding;
|
label += '\t' + binding;
|
||||||
|
|
||||||
return toqstr(label);
|
return label;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#ifndef GUIPOPUPMENU_H
|
#ifndef GUIPOPUPMENU_H
|
||||||
#define GUIPOPUPMENU_H
|
#define GUIPOPUPMENU_H
|
||||||
|
|
||||||
#include "MenuBackend.h"
|
#include "Menus.h"
|
||||||
|
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
#include "GuiApplication.h"
|
#include "GuiApplication.h"
|
||||||
#include "GuiKeySymbol.h"
|
#include "GuiKeySymbol.h"
|
||||||
#include "GuiPainter.h"
|
#include "GuiPainter.h"
|
||||||
#include "GuiPopupMenu.h"
|
|
||||||
#include "GuiView.h"
|
#include "GuiView.h"
|
||||||
#include "KeySymbol.h"
|
#include "KeySymbol.h"
|
||||||
#include "Language.h"
|
#include "Language.h"
|
||||||
@ -51,6 +50,7 @@
|
|||||||
#include <QMacStyle>
|
#include <QMacStyle>
|
||||||
#endif
|
#endif
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
#include <QMenu>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QPalette>
|
#include <QPalette>
|
||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -13,25 +13,211 @@
|
|||||||
#ifndef MENUS_H
|
#ifndef MENUS_H
|
||||||
#define MENUS_H
|
#define MENUS_H
|
||||||
|
|
||||||
#include "MenuBackend.h"
|
#include "FuncStatus.h"
|
||||||
|
#include "FuncRequest.h"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QHash>
|
#include <QHash>
|
||||||
|
|
||||||
|
#include <boost/shared_ptr.hpp>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class QMenu;
|
class QMenu;
|
||||||
|
|
||||||
|
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
|
|
||||||
|
class Lexer;
|
||||||
|
class Buffer;
|
||||||
|
|
||||||
namespace frontend {
|
namespace frontend {
|
||||||
|
|
||||||
|
class Menu;
|
||||||
class GuiView;
|
class GuiView;
|
||||||
class GuiPopupMenu;
|
class GuiPopupMenu;
|
||||||
class GuiView;
|
class GuiView;
|
||||||
|
|
||||||
class Menus : public QObject, public MenuBackend
|
///
|
||||||
{
|
class MenuItem {
|
||||||
Q_OBJECT
|
|
||||||
public:
|
public:
|
||||||
|
/// The type of elements that can be in a menu
|
||||||
|
enum Kind {
|
||||||
|
///
|
||||||
|
Command,
|
||||||
|
///
|
||||||
|
Submenu,
|
||||||
|
///
|
||||||
|
Separator,
|
||||||
|
/** This is the list of last opened file,
|
||||||
|
typically for the File menu. */
|
||||||
|
Lastfiles,
|
||||||
|
/** This is the list of opened Documents,
|
||||||
|
typically for the Documents menu. */
|
||||||
|
Documents,
|
||||||
|
/** This is the bookmarks */
|
||||||
|
Bookmarks,
|
||||||
|
///
|
||||||
|
Toc,
|
||||||
|
/** This is a list of viewable formats
|
||||||
|
typically for the File->View menu. */
|
||||||
|
ViewFormats,
|
||||||
|
/** This is a list of updatable formats
|
||||||
|
typically for the File->Update menu. */
|
||||||
|
UpdateFormats,
|
||||||
|
/** This is a list of exportable formats
|
||||||
|
typically for the File->Export menu. */
|
||||||
|
ExportFormats,
|
||||||
|
/** This is a list of importable formats
|
||||||
|
typically for the File->Export menu. */
|
||||||
|
ImportFormats,
|
||||||
|
/** This is the list of elements available
|
||||||
|
* for insertion into document. */
|
||||||
|
CharStyles,
|
||||||
|
/** This is the list of user-configurable
|
||||||
|
insets to insert into document */
|
||||||
|
Custom,
|
||||||
|
/** This is the list of XML elements to
|
||||||
|
insert into the document */
|
||||||
|
Elements,
|
||||||
|
/** This is the list of floats that we can
|
||||||
|
insert a list for. */
|
||||||
|
FloatListInsert,
|
||||||
|
/** This is the list of floats that we can
|
||||||
|
insert. */
|
||||||
|
FloatInsert,
|
||||||
|
/** This is the list of selections that can
|
||||||
|
be pasted. */
|
||||||
|
PasteRecent,
|
||||||
|
/** toolbars */
|
||||||
|
Toolbars,
|
||||||
|
/** Available branches in document */
|
||||||
|
Branches
|
||||||
|
};
|
||||||
|
|
||||||
|
explicit MenuItem(Kind kind);
|
||||||
|
|
||||||
|
MenuItem(Kind kind,
|
||||||
|
QString const & label,
|
||||||
|
QString const & submenu = QString(),
|
||||||
|
bool optional = false);
|
||||||
|
|
||||||
|
MenuItem(Kind kind,
|
||||||
|
QString const & label,
|
||||||
|
FuncRequest const & func,
|
||||||
|
bool optional = false);
|
||||||
|
|
||||||
|
/// This one is just to please boost::shared_ptr<>
|
||||||
|
~MenuItem();
|
||||||
|
/// The label of a given menuitem
|
||||||
|
QString label() const;
|
||||||
|
/// The keyboard shortcut (usually underlined in the entry)
|
||||||
|
QString shortcut() const;
|
||||||
|
/// The complete label, with label and shortcut separated by a '|'
|
||||||
|
QString fulllabel() const { return label_;}
|
||||||
|
/// The kind of entry
|
||||||
|
Kind kind() const { return kind_; }
|
||||||
|
/// the action (if relevant)
|
||||||
|
FuncRequest const & func() const { return func_; }
|
||||||
|
/// returns true if the entry should be ommited when disabled
|
||||||
|
bool optional() const { return optional_; }
|
||||||
|
/// returns the status of the lfun associated with this entry
|
||||||
|
FuncStatus const & status() const { return status_; }
|
||||||
|
/// returns the status of the lfun associated with this entry
|
||||||
|
FuncStatus & status() { return status_; }
|
||||||
|
/// returns the status of the lfun associated with this entry
|
||||||
|
void status(FuncStatus const & status) { status_ = status; }
|
||||||
|
///returns the binding associated to this action.
|
||||||
|
QString binding() const;
|
||||||
|
/// the description of the submenu (if relevant)
|
||||||
|
QString const & submenuname() const { return submenuname_; }
|
||||||
|
/// set the description of the submenu
|
||||||
|
void submenuname(QString const & name) { submenuname_ = name; }
|
||||||
|
///
|
||||||
|
Menu * submenu() const { return submenu_.get(); }
|
||||||
|
///
|
||||||
|
void submenu(Menu * menu);
|
||||||
|
|
||||||
|
private:
|
||||||
|
///
|
||||||
|
Kind kind_;
|
||||||
|
///
|
||||||
|
QString label_;
|
||||||
|
///
|
||||||
|
FuncRequest func_;
|
||||||
|
///
|
||||||
|
QString submenuname_;
|
||||||
|
///
|
||||||
|
bool optional_;
|
||||||
|
///
|
||||||
|
FuncStatus status_;
|
||||||
|
///
|
||||||
|
boost::shared_ptr<Menu> submenu_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
class Menu {
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
typedef std::vector<MenuItem> ItemList;
|
||||||
|
///
|
||||||
|
typedef ItemList::const_iterator const_iterator;
|
||||||
|
|
||||||
|
///
|
||||||
|
explicit Menu(QString const & name = QString()) : name_(name) {}
|
||||||
|
|
||||||
|
/// Add the menu item unconditionally
|
||||||
|
Menu & add(MenuItem const &);
|
||||||
|
/// Checks the associated FuncRequest status before adding the
|
||||||
|
/// menu item.
|
||||||
|
Menu & addWithStatusCheck(MenuItem const &);
|
||||||
|
///
|
||||||
|
Menu & read(Lexer &);
|
||||||
|
///
|
||||||
|
QString const & name() const { return name_; }
|
||||||
|
///
|
||||||
|
bool empty() const { return items_.empty(); }
|
||||||
|
/// Clear the menu content.
|
||||||
|
void clear() { items_.clear(); }
|
||||||
|
///
|
||||||
|
size_t size() const { return items_.size(); }
|
||||||
|
///
|
||||||
|
MenuItem const & operator[](size_t) const;
|
||||||
|
///
|
||||||
|
bool hasFunc(FuncRequest const &) const;
|
||||||
|
///
|
||||||
|
const_iterator begin() const { return items_.begin(); }
|
||||||
|
///
|
||||||
|
const_iterator end() const { return items_.end(); }
|
||||||
|
|
||||||
|
// Check whether the menu shortcuts are unique
|
||||||
|
void checkShortcuts() const;
|
||||||
|
|
||||||
|
// search for func in this menu iteratively, and put menu
|
||||||
|
// names in a stack.
|
||||||
|
bool searchMenu(FuncRequest const & func, std::vector<docstring> & names)
|
||||||
|
const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend class Menus;
|
||||||
|
///
|
||||||
|
ItemList items_;
|
||||||
|
///
|
||||||
|
QString name_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class Menus
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
typedef std::vector<Menu> MenuList;
|
||||||
|
///
|
||||||
|
typedef MenuList::const_iterator const_iterator;
|
||||||
|
///
|
||||||
|
typedef MenuList::iterator iterator;
|
||||||
|
|
||||||
|
|
||||||
Menus() {}
|
Menus() {}
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -42,6 +228,51 @@ public:
|
|||||||
|
|
||||||
/// update the state of the menuitems - not needed
|
/// update the state of the menuitems - not needed
|
||||||
void updateView();
|
void updateView();
|
||||||
|
///
|
||||||
|
void read(Lexer &);
|
||||||
|
///
|
||||||
|
void add(Menu const &);
|
||||||
|
///
|
||||||
|
bool hasMenu(QString const &) const;
|
||||||
|
///
|
||||||
|
Menu & getMenu(QString const &);
|
||||||
|
///
|
||||||
|
Menu const & getMenu(QString const &) const;
|
||||||
|
///
|
||||||
|
Menu const & getMenubar() const;
|
||||||
|
///
|
||||||
|
bool empty() const { return menulist_.empty(); }
|
||||||
|
/** This defines a menu whose entries list the FuncRequests
|
||||||
|
that will be removed by expand() in other menus. This is
|
||||||
|
used by the Qt/Mac code
|
||||||
|
*/
|
||||||
|
void specialMenu(Menu const &);
|
||||||
|
///
|
||||||
|
Menu const & specialMenu() { return specialmenu_; }
|
||||||
|
|
||||||
|
/// Expands some special entries of the menu
|
||||||
|
/** The entries with the following kind are expanded to a
|
||||||
|
sequence of Command MenuItems: Lastfiles, Documents,
|
||||||
|
ViewFormats, ExportFormats, UpdateFormats, Branches
|
||||||
|
*/
|
||||||
|
void expand(Menu const & frommenu, Menu & tomenu,
|
||||||
|
Buffer const *) const;
|
||||||
|
///
|
||||||
|
const_iterator begin() const { return menulist_.begin(); }
|
||||||
|
///
|
||||||
|
iterator begin() { return menulist_.begin(); }
|
||||||
|
///
|
||||||
|
const_iterator end() const { return menulist_.end(); }
|
||||||
|
///
|
||||||
|
iterator end() { return menulist_.end(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
///
|
||||||
|
MenuList menulist_;
|
||||||
|
///
|
||||||
|
Menu menubar_;
|
||||||
|
///
|
||||||
|
Menu specialmenu_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// Initialize specific MACOS X menubar
|
/// Initialize specific MACOS X menubar
|
||||||
|
Loading…
x
Reference in New Issue
Block a user