]> git.lyx.org Git - lyx.git/blobdiff - src/MenuBackend.h
fix a visual cursor edge-case:
[lyx.git] / src / MenuBackend.h
index c72546c7f8670ec13454add5ca789a1f24bd83da..33e9d57b45c181bdf90ebfba02933eae83ce3f3f 100644 (file)
 #define MENUBACKEND_H
 
 #include "FuncStatus.h"
-#include "funcrequest.h"
+#include "FuncRequest.h"
 
 #include <boost/shared_ptr.hpp>
 
 #include <vector>
+#include <stack>
 
 
 namespace lyx {
 
-class LyXLex;
+class Lexer;
 class Buffer;
 class Menu;
 
@@ -63,6 +64,12 @@ public:
                /** 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,
@@ -110,7 +117,7 @@ public:
        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
+       ///returns the binding associated to this action.
        docstring const binding() const;
        /// the description of the  submenu (if relevant)
        docstring const & submenuname() const { return submenuname_; }
@@ -150,15 +157,14 @@ public:
        ///
        typedef ItemList::size_type size_type;
        ///
-       explicit Menu(docstring const & name = docstring())
-               : name_(name) {}
+       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(LyXLex &);
+       Menu & read(Lexer &);
        ///
        docstring const & name() const { return name_; }
        ///
@@ -172,16 +178,16 @@ public:
        ///
        bool hasFunc(FuncRequest const &) const;
        ///
-       const_iterator begin() const {
-               return items_.begin();
-       }
+       const_iterator begin() const { return items_.begin(); }
        ///
-       const_iterator end() const {
-               return items_.end();
-       }
+       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<docstring> & names) const;
 
 private:
        friend class MenuBackend;
@@ -202,9 +208,9 @@ public:
        ///
        typedef MenuList::iterator iterator;
        ///
-       MenuBackend() : specialmenu_(0) {}
+       MenuBackend() {}
        ///
-       void read(LyXLex &);
+       void read(Lexer &);
        ///
        void add(Menu const &);
        ///
@@ -218,10 +224,13 @@ public:
        ///
        bool empty() const { return menulist_.empty(); }
        /** This defines a menu whose entries list the FuncRequests
-           will be removed by expand() in other menus. This is used by
-           the Qt/Mac code
+           that will be removed by expand() in other menus. This is
+           used by the Qt/Mac code
        */
-       void specialMenu(docstring const &);
+       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,
@@ -230,34 +239,23 @@ public:
        void expand(Menu const & frommenu, Menu & tomenu,
                    Buffer const *) const;
        ///
-       const_iterator begin() const {
-               return menulist_.begin();
-       }
+       const_iterator begin() const { return menulist_.begin(); }
        ///
-       iterator begin() {
-               return menulist_.begin();
-       }
+       iterator begin() { return menulist_.begin(); }
        ///
-       const_iterator end() const {
-               return menulist_.end();
-       }
+       const_iterator end() const { return menulist_.end(); }
        ///
-       iterator end() {
-               return menulist_.end();
-       }
+       iterator end() { return menulist_.end(); }
+
 private:
        ///
        MenuList menulist_;
        ///
        Menu menubar_;
        ///
-       Menu specialmenu_;
+       Menu specialmenu_;
 };
 
-///
-extern MenuBackend menubackend;
-
-
 } // namespace lyx
 
-#endif /* MENUBACKEND_H */
+#endif // MENUBACKEND_H