Author: younes
Date: Sat Mar 8 17:15:34 2008
New Revision: 23565
URL: http://www.lyx.org/trac/changeset/23565
Log:
various cleanup and simplifications
Modified:
lyx-devel/trunk/src/frontends/qt4/Menus.cpp
Modified: lyx-devel/trunk/src/frontends/qt4/Menus.cpp
URL:
http://www.lyx.org/trac/file/lyx-devel/trunk/src/frontends/qt4/Menus.cpp?rev=23565
=
=
=
=
=
=
=
=
======================================================================
--- lyx-devel/trunk/src/frontends/qt4/Menus.cpp (original)
+++ lyx-devel/trunk/src/frontends/qt4/Menus.cpp Sat Mar 8 17:15:34
2008
@@ -199,7 +199,6 @@
typedef std::vector<MenuItem> ItemList;
///
typedef ItemList::const_iterator const_iterator;
-
///
explicit Menu(QString const & name = QString()) : name_(name) {}
@@ -224,9 +223,6 @@
// names in a stack.
bool searchMenu(FuncRequest const & func, std::vector<docstring> &
names)
const;
-
-private:
- friend class Menus;
///
bool hasFunc(FuncRequest const &) const;
/// Add the menu item unconditionally
@@ -249,7 +245,7 @@
void expandPasteRecent();
void expandToolbars();
void expandBranches(Buffer const * buf);
-
+ ///
ItemList items_;
///
QString name_;
@@ -260,10 +256,10 @@
{
public:
///
- GuiPopupMenu(GuiView * owner, MenuItem const & mi, bool top_level)
- : QMenu(owner), owner_(owner), top_level_(top_level)
+ GuiPopupMenu(GuiView * gv, MenuItem const & mi, bool top_level)
+ : QMenu(gv), top_level_menu(top_level? new Menu : 0), view(gv),
+ name(mi.submenuname())
{
- name_ = mi.submenuname();
setTitle(label(mi));
}
@@ -276,20 +272,17 @@
void showEvent(QShowEvent * ev)
{
- if (top_level_)
- guiApp->menus().updateMenu(name_);
+ if (top_level_menu)
+ guiApp->menus().updateMenu(name);
QMenu::showEvent(ev);
}
- bool const top_level_;
-
- ///
- Menu topLevelMenu_;
-
+ /// Only needed for top level menus.
+ Menu * top_level_menu;
/// our owning view
- GuiView * owner_;
+ GuiView * view;
/// the name of this menu
- QString name_;
+ QString name;
};
@@ -318,32 +311,18 @@
return;
}
LYXERR(Debug::GUI, " ***** menu entries " << menu->size());
-
Menu::const_iterator m = menu->begin();
Menu::const_iterator end = menu->end();
-
for (; m != end; ++m) {
-
- if (m->kind() == MenuItem::Separator) {
-
+ if (m->kind() == MenuItem::Separator)
qMenu->addSeparator();
- LYXERR(Debug::GUI, "adding Menubar Separator");
-
- } else if (m->kind() == MenuItem::Submenu) {
-
- LYXERR(Debug::GUI, "** creating New Sub-Menu "
- << fromqstr(label(*m)));
+ else if (m->kind() == MenuItem::Submenu) {
QMenu * subMenu = qMenu->addMenu(label(*m));
populate(subMenu, m->submenu());
-
- } else { // we have a MenuItem::Command
-
- LYXERR(Debug::GUI, "creating Menu Item "
- << fromqstr(m->label()));
-
- Action * action = new Action(*owner_,
- QIcon(), label(*m), m->func(), QString());
- qMenu->addAction(action);
+ } else {
+ // we have a MenuItem::Command
+ qMenu->addAction(new Action(*view, QIcon(), label(*m),
m->func(),
+ QString()));
}
}
}
@@ -371,6 +350,7 @@
} // namespace anon
+
struct Menus::Impl {
///
void add(Menu const &);
@@ -380,15 +360,6 @@
Menu & getMenu(QString const &);
///
Menu const & getMenu(QString const &) const;
- ///
- bool empty() const { return menulist_.empty(); }
- /** This defines a menu whose entries list the FuncRequests
- that will be removed by expand() in other menus. This is
- used by the Qt/Mac code
- */
- void setSpecialMenu(Menu const & menu) { specialmenu_ = menu; }
- ///
- Menu const & specialMenu() { return specialmenu_; }
/// Expands some special entries of the menu
/** The entries with the following kind are expanded to a
@@ -397,24 +368,21 @@
*/
void expand(Menu const & frommenu, Menu & tomenu,
Buffer const *) const;
- ///
- const_iterator begin() const { return menulist_.begin(); }
- ///
- iterator begin() { return menulist_.begin(); }
- ///
- const_iterator end() const { return menulist_.end(); }
- ///
- iterator end() { return menulist_.end(); }
-
- ///
- MenuList menulist_;
- ///
- Menu menubar_;
- ///
- Menu specialmenu_;
/// Initialize specific MACOS X menubar
void macxMenuBarInit(GuiView * view);
+
+ /// Mac special menu.
+ /** This defines a menu whose entries list the FuncRequests
+ that will be removed by expand() in other menus. This is
+ used by the Qt/Mac code
+ */
+ Menu specialmenu_;
+
+ ///
+ MenuList menulist_;
+ ///
+ Menu menubar_;
typedef QHash<QString, GuiPopupMenu *> NameMap;
@@ -490,23 +458,23 @@
{
GuiPopupMenu * qmenu = d->name_map_[name];
LYXERR(Debug::GUI, "GuiPopupMenu::updateView()"
- << "\tTriggered menu: " << fromqstr(qmenu->name_));
+ << "\tTriggered menu: " << fromqstr(qmenu->name));
qmenu->clear();
- if (qmenu->name_.isEmpty())
+ if (qmenu->name.isEmpty())
return;
// Here, We make sure that theLyXFunc points to the correct LyXView.
- theLyXFunc().setLyXView(qmenu->owner_);
-
- Menu const & fromLyxMenu = d->getMenu(qmenu->name_);
- d->expand(fromLyxMenu, qmenu->topLevelMenu_, qmenu->owner_-
>buffer());
-
- if (!d->hasMenu(qmenu->topLevelMenu_.name())) {
+ theLyXFunc().setLyXView(qmenu->view);
+
+ Menu const & fromLyxMenu = d->getMenu(qmenu->name);
+ d->expand(fromLyxMenu, *qmenu->top_level_menu, qmenu->view-
>buffer());
+
+ if (!d->hasMenu(qmenu->top_level_menu->name())) {
LYXERR(Debug::GUI, "\tWARNING: menu seems empty"
- << fromqstr(qmenu->topLevelMenu_.name()));
- }
- qmenu->populate(qmenu, &qmenu->topLevelMenu_);
+ << fromqstr(qmenu->top_level_menu->name()));
+ }
+ qmenu->populate(qmenu, qmenu->top_level_menu);
}
@@ -585,22 +553,17 @@
const size_t num_entries = sizeof(entries) / sizeof(entries[0]);
// the special menu for Menus.
- Menu special;
for (size_t i = 0 ; i < num_entries ; ++i) {
FuncRequest const func(entries[i].action,
from_utf8(entries[i].arg));
- special.add(MenuItem(MenuItem::Command, entries[i].label,
func));
- }
- setSpecialMenu(special);
+ specialmenu_.add(MenuItem(MenuItem::Command, entries[i].label,
func));
+ }
// add the entries to a QMenu that will eventually be empty
// and therefore invisible.
QMenu * qMenu = view->menuBar()->addMenu("special");
-
- // we do not use 'special' because it is a temporary variable,
- // whereas Menus::specialMenu points to a persistent copy.
- Menu::const_iterator cit = specialMenu().begin();
- Menu::const_iterator end = specialMenu().end();
+ Menu::const_iterator cit = specialmenu_.begin();
+ Menu::const_iterator end = specialmenu_.end();
for (size_t i = 0 ; cit != end ; ++cit, ++i) {
Action * action = new Action(*view, QIcon(), cit->label(),
cit->func(), QString());
@@ -1472,8 +1435,7 @@
}
// we do not want the menu to end with a separator
- if (!tomenu.empty()
- && tomenu.items_.back().kind() == MenuItem::Separator)
+ if (!tomenu.empty() && tomenu.items_.back().kind() ==
MenuItem::Separator)
tomenu.items_.pop_back();
// Check whether the shortcuts are unique
@@ -1516,9 +1478,9 @@
case md_menu: {
lex.next(true);
QString const name = toqstr(lex.getDocString());
- if (d->hasMenu(name)) {
+ if (d->hasMenu(name))
d->getMenu(name).read(lex);
- } else {
+ else {
Menu menu(name);
menu.read(lex);
d->add(menu);
@@ -1546,26 +1508,29 @@
bool Menus::Impl::hasMenu(QString const & name) const
{
- return find_if(begin(), end(), MenuNamesEqual(name)) != end();
+ return find_if(menulist_.begin(), menulist_.end(),
+ MenuNamesEqual(name)) != menulist_.end();
}
Menu const & Menus::Impl::getMenu(QString const & name) const
{
- const_iterator cit = find_if(begin(), end(), MenuNamesEqual(name));
- if (cit == end())
+ const_iterator cit = find_if(menulist_.begin(), menulist_.end(),
+ MenuNamesEqual(name));
+ if (cit == menulist_.end())
lyxerr << "No submenu named " << fromqstr(name) << endl;
- BOOST_ASSERT(cit != end());
+ BOOST_ASSERT(cit != menulist_.end());
return (*cit);
}
Menu & Menus::Impl::getMenu(QString const & name)
{
- iterator it = find_if(begin(), end(), MenuNamesEqual(name));
- if (it == end())
+ iterator it = find_if(menulist_.begin(), menulist_.end(),
+ MenuNamesEqual(name));
+ if (it == menulist_.end())
lyxerr << "No submenu named " << fromqstr(name) << endl;
- BOOST_ASSERT(it != end());
+ BOOST_ASSERT(it != menulist_.end());
return (*it);
}