]> git.lyx.org Git - lyx.git/blobdiff - src/MenuBackend.cpp
cleanup and reorder initialisation code of GuiView and GuiToolbars. Move some things...
[lyx.git] / src / MenuBackend.cpp
index fec705230dd64dddca6ce2f7518f36575a1abc3b..8368f8e5c31e594eff262f06e264ff972fcaa85f 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"
@@ -36,6 +35,7 @@
 #include "LyXFunc.h"
 #include "Lexer.h"
 #include "Paragraph.h"
+#include "TextClass.h"
 #include "TocBackend.h"
 #include "ToolbarBackend.h"
 
@@ -65,7 +65,7 @@ using std::max;
 using std::sort;
 using std::string;
 using std::vector;
-
+using std::stack;
 
 namespace {
 
@@ -73,8 +73,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:
@@ -139,18 +138,15 @@ docstring const MenuItem::binding(bool forgui) const
 
        // Get the keys bound to this action, but keep only the
        // first one later
-       KeyMap::Bindings bindings = theTopLevelKeymap().findbindings(func_);
+       KeyMap::Bindings bindings = theTopLevelKeymap().findBindings(func_);
 
-       if (bindings.size()) {
-               return bindings.begin()->print(forgui);
-       } else {
-               LYXERR(Debug::KBMAP)
-                       << "No binding for "
-                       << lyxaction.getActionName(func_.action)
-                       << '(' << to_utf8(func_.argument()) << ')' << endl;
-               return docstring();
-       }
+       if (bindings.size())
+               return bindings.begin()->print(KeySequence::ForGui);
 
+       LYXERR(Debug::KBMAP, "No binding for "
+               << lyxaction.getActionName(func_.action)
+               << '(' << to_utf8(func_.argument()) << ')');
+       return docstring();
 }
 
 
@@ -423,6 +419,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;
@@ -475,11 +492,13 @@ void expandDocuments(Menu & tomenu)
                
                // We cannot use a for loop as the buffer list cycles.
                do {
-                       docstring label = makeDisplayPath(b->fileName(), 20);
-                       if (!b->isClean()) label = label + "*";
+                       docstring label = b->fileName().displayName(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;
@@ -487,7 +506,6 @@ void expandDocuments(Menu & tomenu)
        } else {
                tomenu.add(MenuItem(MenuItem::Command, _("No Documents Open!"),
                           FuncRequest(LFUN_NOACTION)));
-               return;
        }
 }
 
@@ -523,19 +541,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());
@@ -726,7 +744,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());
@@ -836,7 +854,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!"),