]> git.lyx.org Git - lyx.git/blobdiff - src/MenuBackend.cpp
* src/LyXRC.{cpp,h}:
[lyx.git] / src / MenuBackend.cpp
index e9d2509e81baf086006e936abefc9792cb8c340a..25d9f74412184608d4b6a8cd2ce687036f839cc1 100644 (file)
 #include "Buffer.h"
 #include "BufferList.h"
 #include "BufferParams.h"
+#include "Converter.h"
 #include "CutAndPaste.h"
 #include "debug.h"
-#include "Exporter.h"
 #include "Floating.h"
 #include "FloatList.h"
 #include "Format.h"
 #include "gettext.h"
-#include "Importer.h"
 #include "KeyMap.h"
 #include "Session.h"
 #include "LyXAction.h"
@@ -65,7 +64,7 @@ using std::max;
 using std::sort;
 using std::string;
 using std::vector;
-
+using std::stack;
 
 namespace {
 
@@ -73,8 +72,7 @@ class MenuNamesEqual : public std::unary_function<Menu, bool> {
 public:
        MenuNamesEqual(docstring const & name)
                : name_(name) {}
-       bool operator()(Menu const & menu) const
-       {
+       bool operator()(Menu const & menu) const {
                return menu.name() == name_;
        }
 private:
@@ -142,7 +140,7 @@ docstring const MenuItem::binding(bool forgui) const
        KeyMap::Bindings bindings = theTopLevelKeymap().findbindings(func_);
 
        if (bindings.size()) {
-               return bindings.begin()->print(forgui);
+               return bindings.begin()->print(KeySequence::ForGui);
        } else {
                LYXERR(Debug::KBMAP)
                        << "No binding for "
@@ -219,6 +217,7 @@ Menu & Menu::read(Lexer & lex)
                md_bookmarks,
                md_charstyles,
                md_custom,
+               md_elements,
                md_endmenu,
                md_exportformats,
                md_importformats,
@@ -243,6 +242,7 @@ Menu & Menu::read(Lexer & lex)
                { "charstyles", md_charstyles },
                { "custom", md_custom },
                { "documents", md_documents },
+               { "elements", md_elements },
                { "end", md_endmenu },
                { "exportformats", md_exportformats },
                { "floatinsert", md_floatinsert },
@@ -300,6 +300,10 @@ Menu & Menu::read(Lexer & lex)
                        add(MenuItem(MenuItem::Custom));
                        break;
 
+               case md_elements:
+                       add(MenuItem(MenuItem::Elements));
+                       break;
+
                case md_documents:
                        add(MenuItem(MenuItem::Documents));
                        break;
@@ -417,6 +421,27 @@ void Menu::checkShortcuts() const
 }
 
 
+bool Menu::searchFunc(FuncRequest & func, stack<docstring> & names)
+{
+       const_iterator m = begin();
+       const_iterator m_end = end();
+       for (; m != m_end; ++m) {
+               if (m->kind() == MenuItem::Command && m->func() == func) {
+                       names.push(m->label());
+                       return true;
+               } else if (m->kind() == MenuItem::Submenu) {
+                       names.push(m->label());
+                       Menu submenu = menubackend.getMenu(m->submenuname());
+                       if (submenu.searchFunc(func, names))
+                               return true;
+                       else
+                               names.pop();
+               }
+       }
+       return false;
+}
+
+
 void MenuBackend::specialMenu(Menu const & menu)
 {
        specialmenu_ = menu;
@@ -469,11 +494,12 @@ void expandDocuments(Menu & tomenu)
                
                // We cannot use a for loop as the buffer list cycles.
                do {
-                       docstring label = makeDisplayPath(b->fileName(), 20);
+                       docstring label = makeDisplayPath(b->absFileName(), 20);
                        if (!b->isClean()) label = label + "*";
                        if (ii < 10)
                                label = convert<docstring>(ii) + ". " + label + '|' + convert<docstring>(ii);
-                       tomenu.add(MenuItem(MenuItem::Command, label, FuncRequest(LFUN_BUFFER_SWITCH, b->fileName())));
+                       tomenu.add(MenuItem(MenuItem::Command, label,
+                               FuncRequest(LFUN_BUFFER_SWITCH, b->absFileName())));
                        
                        b = theBufferList().next(b);
                        ++ii;
@@ -517,19 +543,19 @@ void expandFormats(MenuItem::Kind kind, Menu & tomenu, Buffer const * buf)
 
        switch (kind) {
        case MenuItem::ImportFormats:
-               formats = Importer::GetImportableFormats();
+               formats = theConverters().importableFormats();
                action = LFUN_BUFFER_IMPORT;
                break;
        case MenuItem::ViewFormats:
-               formats = Exporter::getExportableFormats(*buf, true);
+               formats = buf->exportableFormats(true);
                action = LFUN_BUFFER_VIEW;
                break;
        case MenuItem::UpdateFormats:
-               formats = Exporter::getExportableFormats(*buf, true);
+               formats = buf->exportableFormats(true);
                action = LFUN_BUFFER_UPDATE;
                break;
        default:
-               formats = Exporter::getExportableFormats(*buf, false);
+               formats = buf->exportableFormats(false);
                action = LFUN_BUFFER_EXPORT;
        }
        sort(formats.begin(), formats.end(), compare_format());
@@ -720,7 +746,7 @@ void expandToc(Menu & tomenu, Buffer const * buf)
        cbuf->structureChanged();
 
        // Add an entry for the master doc if this is a child doc
-       Buffer const * const master = buf->getMasterBuffer();
+       Buffer const * const master = buf->masterBuffer();
        if (buf != master) {
                ParIterator const pit = par_iterator_begin(master->inset());
                string const arg = convert<string>(pit->id());
@@ -830,7 +856,7 @@ void expandBranches(Menu & tomenu, Buffer const * buf)
                return;
        }
 
-       BufferParams const & params = buf->getMasterBuffer()->params();
+       BufferParams const & params = buf->masterBuffer()->params();
        if (params.branchlist().empty()) {
                tomenu.add(MenuItem(MenuItem::Command,
                                    _("No Branch in Document!"),
@@ -891,6 +917,10 @@ void MenuBackend::expand(Menu const & frommenu, Menu & tomenu,
                        expandFlexInsert(tomenu, buf, "custom");
                        break;
 
+               case MenuItem::Elements:
+                       expandFlexInsert(tomenu, buf, "element");
+                       break;
+
                case MenuItem::FloatListInsert:
                        expandFloatListInsert(tomenu, buf);
                        break;