]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/Menus.cpp
fix completion painting for RTL (inline completion and completion list)
[lyx.git] / src / frontends / qt4 / Menus.cpp
index 1217dfb043fecfff0127aa99c778874057a55100..7acb9e11b35ee4b35c3d1d44bea6f4ddd0d47d87 100644 (file)
@@ -46,7 +46,7 @@
 #include "Session.h"
 #include "TextClass.h"
 #include "TocBackend.h"
-#include "ToolbarBackend.h"
+#include "Toolbars.h"
 
 #include "insets/Inset.h"
 #include "insets/InsetCitation.h"
@@ -55,6 +55,7 @@
 #include "support/lassert.h"
 #include "support/convert.h"
 #include "support/debug.h"
+#include "support/docstring_list.h"
 #include "support/filetools.h"
 #include "support/gettext.h"
 #include "support/lstrings.h"
@@ -269,7 +270,7 @@ public:
        
        // search for func in this menu iteratively, and put menu
        // names in a stack.
-       bool searchMenu(FuncRequest const & func, std::vector<docstring> & names)
+       bool searchMenu(FuncRequest const & func, docstring_list & names)
                const;
        ///
        bool hasFunc(FuncRequest const &) const;
@@ -351,7 +352,7 @@ void MenuDefinition::addWithStatusCheck(MenuItem const & i)
                        }
                        if (enabled || !i.optional()) {
                                items_.push_back(i);
-                               items_.back().status().enabled(enabled);
+                               items_.back().status().setEnabled(enabled);
                        }
                }
                else
@@ -591,7 +592,7 @@ void MenuDefinition::checkShortcuts() const
 }
 
 
-bool MenuDefinition::searchMenu(FuncRequest const & func, vector<docstring> & names) const
+bool MenuDefinition::searchMenu(FuncRequest const & func, docstring_list & names) const
 {
        const_iterator m = begin();
        const_iterator m_end = end();
@@ -638,21 +639,15 @@ void MenuDefinition::expandGraphicsGroups(BufferView const * bv)
 {
        if (!bv)
                return;
-       Cursor const & cur = bv->cursor();
-       Buffer const & buf = bv->buffer();
        set<string> grp;
-       InsetGraphics::getGraphicsGroups(buf, grp);
-       set<string>::const_iterator it = grp.begin();
-       set<string>::const_iterator end = grp.end();
+       graphics::getGraphicsGroups(bv->buffer(), grp);
        if (grp.empty())
                return;
 
-       InsetGraphics * ins = InsetGraphics::getCurrentGraphicsInset(cur);
-       if (!ins)
-               return;
-       add(MenuItem(MenuItem::Separator));
-       if (!ins->getParams().groupId.empty())
-               add(MenuItem(MenuItem::Command, qt_("Clear group"), FuncRequest(LFUN_SET_GRAPHICS_GROUP)));
+       set<string>::const_iterator it = grp.begin();
+       set<string>::const_iterator end = grp.end();
+       add(MenuItem(MenuItem::Command, qt_("No Group"), 
+                    FuncRequest(LFUN_SET_GRAPHICS_GROUP)));
        for (; it != end; it++) {
                addWithStatusCheck(MenuItem(MenuItem::Command, toqstr(*it),
                                FuncRequest(LFUN_SET_GRAPHICS_GROUP, *it)));
@@ -755,17 +750,24 @@ void MenuDefinition::expandFormats(MenuItem::Kind kind, Buffer const * buf)
        for (; fit != end ; ++fit) {
                if ((*fit)->dummy())
                        continue;
-               QString label = toqstr((*fit)->prettyname());
-               QString const shortcut = toqstr((*fit)->shortcut());
+
+               docstring lab = from_utf8((*fit)->prettyname());
+               docstring scut = from_utf8((*fit)->shortcut());
+               docstring const tmplab = lab;
+               if (!scut.empty())
+                       lab += char_type('|') + scut;
+               docstring lab_i18n = translateIfPossible(lab);
+               bool const untranslated = (lab == lab_i18n);
+               QString const shortcut = toqstr(split(lab_i18n, lab, '|'));
+               QString label = toqstr(lab);
+               if (untranslated)
+                       // this might happen if the shortcut
+                       // has been redefined
+                       label = toqstr(translateIfPossible(tmplab));
 
                switch (kind) {
                case MenuItem::ImportFormats:
-                       // FIXME: This is a hack, we should rather solve
-                       // FIXME: bug 2488 instead.
-                       if ((*fit)->name() == "text")
-                               label = qt_("Plain Text");
-                       else if ((*fit)->name() == "textparagraph")
-                               label = qt_("Plain Text, Join Lines");
                        label += "...";
                        break;
                case MenuItem::ViewFormats:
@@ -778,12 +780,7 @@ void MenuDefinition::expandFormats(MenuItem::Kind kind, Buffer const * buf)
                        LASSERT(false, /**/);
                        break;
                }
-               // FIXME: if we had proper support for translating the
-               // format names defined in configure.py, there would
-               // not be a need to check whether the shortcut is
-               // correct. If we add it uncondiitonally, it would
-               // create useless warnings on bad shortcuts
-               if (!shortcut.isEmpty() && label.contains(shortcut))
+               if (!shortcut.isEmpty())
                        label += '|' + shortcut;
 
                if (buf)
@@ -810,7 +807,7 @@ void MenuDefinition::expandFloatListInsert(Buffer const * buf)
        for (; cit != end; ++cit) {
                addWithStatusCheck(MenuItem(MenuItem::Command,
                                    qt_(cit->second.listName()),
-                                   FuncRequest(LFUN_FLOAT_LIST,
+                                   FuncRequest(LFUN_FLOAT_LIST_INSERT,
                                                cit->second.type())));
        }
 }
@@ -951,12 +948,6 @@ void MenuDefinition::expandToc(Buffer const * buf)
                if (cit->first == "tableofcontents")
                        continue;
 
-               if (cit->first == "listing") {
-                       // FIXME: the listing navigate menu causes a crash for unknown
-                       // reason. See http://bugzilla.lyx.org/show_bug.cgi?id=4613
-                       continue;
-               }
-
                MenuDefinition submenu;
                if (cit->second.size() >= 30) {
                        FuncRequest f(LFUN_DIALOG_SHOW, "toc " + cit->first);
@@ -999,10 +990,10 @@ void MenuDefinition::expandToc(Buffer const * buf)
 
 void MenuDefinition::expandPasteRecent()
 {
-       vector<docstring> const sel = cap::availableSelections();
+       docstring_list const sel = cap::availableSelections();
 
-       vector<docstring>::const_iterator cit = sel.begin();
-       vector<docstring>::const_iterator end = sel.end();
+       docstring_list::const_iterator cit = sel.begin();
+       docstring_list::const_iterator end = sel.end();
 
        for (unsigned int index = 0; cit != end; ++cit, ++index) {
                add(MenuItem(MenuItem::Command, toqstr(*cit),
@@ -1013,27 +1004,23 @@ void MenuDefinition::expandPasteRecent()
 
 void MenuDefinition::expandToolbars()
 {
-       //
+       MenuDefinition other_lists;
        // extracts the toolbars from the backend
-       ToolbarBackend::Toolbars::const_iterator cit = toolbarbackend.begin();
-       ToolbarBackend::Toolbars::const_iterator end = toolbarbackend.end();
-
+       Toolbars::Infos::const_iterator cit = guiApp->toolbars().begin();
+       Toolbars::Infos::const_iterator end = guiApp->toolbars().end();
        for (; cit != end; ++cit) {
-               QString label = qt_(cit->gui_name);
-               // frontends are not supposed to turn on/off toolbars,
-               // if they cannot update ToolbarBackend::flags. That
-               // is to say, ToolbarsBackend::flags should reflect
-               // the true state of toolbars.
-               //
-               // menu is displayed as
-               //       on/off review
-               // and
-               //              review (auto)
-               // in the case of auto.
-               if (cit->flags & ToolbarInfo::AUTO)
-                       label += qt_(" (auto)");
-               add(MenuItem(MenuItem::Command, label,
-                                   FuncRequest(LFUN_TOOLBAR_TOGGLE, cit->name + " allowauto")));
+               MenuItem const item(MenuItem::Command, qt_(cit->gui_name),
+                               FuncRequest(LFUN_TOOLBAR_TOGGLE, cit->name));
+               if (guiApp->toolbars().isMainToolbar(cit->name))
+                       add(item);
+               else
+                       other_lists.add(item);
+       }
+
+       if (!other_lists.empty()) {
+               MenuItem item(MenuItem::Submenu, qt_("Other Toolbars"));
+               item.setSubmenu(other_lists);
+               add(item);
        }
 }
 
@@ -1095,11 +1082,11 @@ void MenuDefinition::expandCiteStyles(BufferView const * bv)
                key = qstring_to_ucs4(toqstr(key).split(',')[0]);
 
        vector<CiteStyle> citeStyleList = citeStyles(buf->params().citeEngine());
-       vector<docstring> citeStrings =
+       docstring_list citeStrings =
                buf->masterBibInfo().getCiteStrings(key, bv->buffer());
 
-       vector<docstring>::const_iterator cit = citeStrings.begin();
-       vector<docstring>::const_iterator end = citeStrings.end();
+       docstring_list::const_iterator cit = citeStrings.begin();
+       docstring_list::const_iterator end = citeStrings.end();
 
        for (int ii = 1; cit != end; ++cit, ++ii) {
                docstring label = *cit;
@@ -1524,7 +1511,7 @@ void Menus::read(Lexer & lex)
 
 
 bool Menus::searchMenu(FuncRequest const & func,
-       vector<docstring> & names) const
+       docstring_list & names) const
 {
        MenuDefinition menu;
        d->expand(d->menubar_, menu, 0);