]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiPopupMenu.cpp
do what the FIXME suggested
[lyx.git] / src / frontends / qt4 / GuiPopupMenu.cpp
index 9b479fc7d4d405d3f4a9e27830eb867fae01c792..b4ff3ae51775454d4a59cce282135cf5fa8331db 100644 (file)
 
 #include <config.h>
 
-#include <boost/current_function.hpp>
-
-// Qt defines a macro 'signals' that clashes with a boost namespace.
-// All is well if the namespace is visible first.
 #include "GuiView.h"
 
 #include "Action.h"
+#include "GuiApplication.h"
 #include "GuiPopupMenu.h"
-#include "GuiMenubar.h"
 #include "qt_helpers.h"
+
+#include "LyXFunc.h"
 #include "MenuBackend.h"
 
+#include "support/debug.h"
 #include "support/lstrings.h"
-#include "debug.h"
-
-
-using std::make_pair;
-using std::string;
-using std::pair;
-using std::endl;
-
 
 namespace lyx {
 namespace frontend {
 
-GuiPopupMenu::GuiPopupMenu(GuiMenubar * owner,
-                                                MenuItem const & mi, bool topLevelMenu)
-       : owner_(owner)
+GuiPopupMenu::GuiPopupMenu(GuiView * owner, MenuItem const & mi,
+               bool topLevelMenu)
+       : QMenu(owner), owner_(owner)
 {
        name_ = mi.submenuname();
 
        setTitle(toqstr(getLabel(mi)));
 
        if (topLevelMenu)
-               connect(this, SIGNAL(aboutToShow()), this, SLOT(update()));
+               connect(this, SIGNAL(aboutToShow()), this, SLOT(updateView()));
 }
 
 
-void GuiPopupMenu::update()
+void GuiPopupMenu::updateView()
 {
-       LYXERR(Debug::GUI) << BOOST_CURRENT_FUNCTION << endl;
-       LYXERR(Debug::GUI) << "\tTriggered menu: " << to_utf8(name_) << endl;
+       LYXERR(Debug::GUI, "GuiPopupMenu::updateView()"
+               << "\tTriggered menu: " << to_utf8(name_));
 
        clear();
 
@@ -60,14 +51,15 @@ void GuiPopupMenu::update()
                return;
 
        // Here, We make sure that theLyXFunc points to the correct LyXView.
-       theLyXFunc().setLyXView(owner_->view());
+       theLyXFunc().setLyXView(owner_);
 
-       Menu const & fromLyxMenu = owner_->backend().getMenu(name_);
-       owner_->backend().expand(fromLyxMenu, topLevelMenu_, owner_->view()->buffer());
+       MenuBackend const & menubackend = guiApp->menuBackend();
+       Menu const & fromLyxMenu = menubackend.getMenu(name_);
+       menubackend.expand(fromLyxMenu, topLevelMenu_, owner_->buffer());
 
-       if (!owner_->backend().hasMenu(topLevelMenu_.name())) {
-               LYXERR(Debug::GUI) << "\tWARNING: menu seems empty"
-                       << to_utf8(topLevelMenu_.name()) << endl;
+       if (!menubackend.hasMenu(topLevelMenu_.name())) {
+               LYXERR(Debug::GUI, "\tWARNING: menu seems empty"
+                       << to_utf8(topLevelMenu_.name()));
        }
        populate(this, &topLevelMenu_);
 }
@@ -75,15 +67,12 @@ void GuiPopupMenu::update()
 
 void GuiPopupMenu::populate(QMenu * qMenu, Menu * menu)
 {
-       LYXERR(Debug::GUI) << "populating menu " << to_utf8(menu->name()) ;
+       LYXERR(Debug::GUI, "populating menu " << to_utf8(menu->name()));
        if (menu->size() == 0) {
-               LYXERR(Debug::GUI) << "\tERROR: empty menu "
-                       << to_utf8(menu->name()) << endl;
+               LYXERR(Debug::GUI, "\tERROR: empty menu " << to_utf8(menu->name()));
                return;
        }
-       else {
-               LYXERR(Debug::GUI) << " *****  menu entries " << menu->size() << endl;
-       }
+       LYXERR(Debug::GUI, " *****  menu entries " << menu->size());
 
        Menu::const_iterator m = menu->begin();
        Menu::const_iterator end = menu->end();
@@ -93,25 +82,24 @@ void GuiPopupMenu::populate(QMenu * qMenu, Menu * menu)
                if (m->kind() == MenuItem::Separator) {
 
                        qMenu->addSeparator();
-                       LYXERR(Debug::GUI) << "adding Menubar Separator" << endl;
+                       LYXERR(Debug::GUI, "adding Menubar Separator");
 
                } else if (m->kind() == MenuItem::Submenu) {
 
-                       LYXERR(Debug::GUI) << "** creating New Sub-Menu "
-                               << to_utf8(getLabel(*m)) << endl;
+                       LYXERR(Debug::GUI, "** creating New Sub-Menu "
+                               << to_utf8(getLabel(*m)));
                        QMenu * subMenu = qMenu->addMenu(toqstr(getLabel(*m)));
                        populate(subMenu, m->submenu());
 
                } else { // we have a MenuItem::Command
 
-                       LYXERR(Debug::GUI) << "creating Menu Item "
-                               << to_utf8(m->label()) << endl;
+                       LYXERR(Debug::GUI, "creating Menu Item "
+                               << to_utf8(m->label()));
 
-                       docstring label = getLabel(*m);
-                       addBinding(label, *m);
+                       docstring const label = getLabel(*m);
 
-                       Action * action = new Action(*(owner_->view()),
-                                                    label, m->func());
+                       Action * action = new Action(*(owner_),
+                               QIcon(), toqstr(label), m->func(), QString());
                        qMenu->addAction(action);
                }
        }
@@ -120,29 +108,21 @@ void GuiPopupMenu::populate(QMenu * qMenu, Menu * menu)
 
 docstring const GuiPopupMenu::getLabel(MenuItem const & mi)
 {
-       docstring const shortcut = mi.shortcut();
-       docstring label = support::subst(mi.label(),
-       from_ascii("&"), from_ascii("&&"));
+       docstring label = support::subst(mi.label(), 
+                                        from_ascii("&"), from_ascii("&&"));
 
+       docstring const shortcut = mi.shortcut();
        if (!shortcut.empty()) {
-               docstring::size_type pos = label.find(shortcut);
+               size_t pos = label.find(shortcut);
                if (pos != docstring::npos)
                        label.insert(pos, 1, char_type('&'));
        }
 
-       return label;
-}
-
-
-void GuiPopupMenu::addBinding(docstring & label, MenuItem const & mi)
-{
-#ifdef Q_WS_MACX
-       docstring const binding = mi.binding(false);
-#else
-       docstring const binding = mi.binding(true);
-#endif
+       docstring const binding = mi.binding();
        if (!binding.empty())
                label += '\t' + binding;
+
+       return label;
 }