X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FMenuBackend.h;h=33e9d57b45c181bdf90ebfba02933eae83ce3f3f;hb=4056f0ddb150d0e5d60bc5941d51e365eed0ac86;hp=161d9283dfb6c66e97d59c13985d254c01ba7966;hpb=aa5aac89dec42cb52415002f6de9c3532613e527;p=lyx.git diff --git a/src/MenuBackend.h b/src/MenuBackend.h index 161d9283df..33e9d57b45 100644 --- a/src/MenuBackend.h +++ b/src/MenuBackend.h @@ -1,28 +1,32 @@ -/* This file is part of -*- C++ -*- -* ====================================================== -* -* LyX, The Document Processor -* -* Copyright 1995 Matthias Ettrich -* Copyright 1995-2000 The LyX Team. -* -* This file is Copyright 1999 -* Jean-Marc Lasgouttes -* -*======================================================*/ +// -*- 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 -#ifdef __GNUG__ -#pragma interface -#endif +#include "FuncStatus.h" +#include "FuncRequest.h" + +#include -#include "LString.h" -#include "support/lstrings.h" #include +#include + + +namespace lyx { -class LyXLex; +class Lexer; +class Buffer; +class Menu; /// class MenuItem { @@ -40,36 +44,106 @@ public: Lastfiles, /** This is the list of opened Documents, typically for the Documents menu. */ - Documents + 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 }; - /// Create a Command type MenuItem - MenuItem(Kind kind, - string const & label = string(), - string const & command = string(), + + 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 - string label() const { return token(label_, '|', 0); } - /// - string shortcut() const { return token(label_, '|', 1); } + 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_; } + Kind kind() const { return kind_; } /// the action (if relevant) - int action() const { return action_; } - /// the description of the submenu (if relevant) - string const & submenu() const { return submenu_; } + 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_; /// - string label_; + docstring label_; /// - int action_; + FuncRequest func_; /// - string submenu_; + docstring submenuname_; /// bool optional_; + /// + FuncStatus status_; + /// + boost::shared_ptr submenu_; }; @@ -81,34 +155,46 @@ public: /// typedef ItemList::const_iterator const_iterator; /// - explicit Menu(string const & name, bool mb = false) - : menubar_(mb), name_(name) {} + 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 &); /// - Menu & read(LyXLex &); - /// - bool menubar() const { return menubar_; } - /// - string const & name() const { return name_; } + docstring const & name() const { return name_; } /// bool empty() const { return items_.empty(); } - /// - const_iterator begin() const { - return items_.begin(); - } - /// - const_iterator end() const { - return items_.end(); - } -private: + /// Clear the menu content. + void clear() { items_.clear(); } /// - ItemList items_; + ItemList::size_type size() const { return items_.size(); } + /// + MenuItem const & operator[](size_type) const; /// - bool menubar_; + bool hasFunc(FuncRequest const &) const; /// - string name_; + 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 searchFunc(FuncRequest & func, std::stack & names) const; + +private: + friend class MenuBackend; + /// + ItemList items_; + /// + docstring name_; }; @@ -120,33 +206,56 @@ public: /// typedef MenuList::const_iterator const_iterator; /// - void read(LyXLex &); - /// Set default values for menu structure. - void defaults(); + typedef MenuList::iterator iterator; + /// + MenuBackend() {} + /// + void read(Lexer &); /// void add(Menu const &); /// - bool hasMenu (string const &) const; + bool hasMenu(docstring const &) const; + /// + Menu & getMenu(docstring const &); + /// + Menu const & getMenu(docstring const &) const; /// - Menu & getMenu (string const &); + Menu const & getMenubar() const; /// - Menu const & getMenu (string const &) const; - // bool empty() const { return menulist_.empty(); } - /// - const_iterator begin() const { - return menulist_.begin(); - } - /// - const_iterator end() const { - return menulist_.end(); - } + /** 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_; }; -/// -extern MenuBackend menubackend; +} // namespace lyx -#endif /* MENUBACKEND_H */ +#endif // MENUBACKEND_H