2 * \file Menubar_pimpl.C
3 * Copyright 1999-2001 The LyX Team.
4 * See the file COPYING.
6 * \author Lars Gullik Bjønnes, larsbj@lyx.org
14 #pragma implementation
17 #include "Menubar_pimpl.h"
18 #include "MenuBackend.h"
19 #include "LyXAction.h"
24 #include "FloatList.h"
25 #include "support/lstrings.h"
26 #include "support/LAssert.h"
33 #include <qpopupmenu.h>
41 typedef vector<int>::size_type size_type;
43 extern boost::scoped_ptr<kb_keymap> toplevel_keymap;
44 extern LyXAction lyxaction;
47 Menubar::Pimpl::Pimpl(LyXView * view, MenuBackend const & mb)
48 : owner_(static_cast<QtView*>(view)), menubackend_(mb)
50 MenuBackend::const_iterator mb = menubackend_.begin();
51 MenuBackend::const_iterator mbend = menubackend_.end();
52 for (; mb != mbend; ++mb) {
53 if (mb->menubar() && mb->name() == "main") {
54 Menu::const_iterator m = mb->begin();
55 Menu::const_iterator end = mb->end();
56 for (; m != end; ++m) {
57 makeMenu(owner_->menuBar(), *m);
64 void Menubar::Pimpl::makeMenu(QMenuData * parent, MenuItem const & menu)
67 QPopupMenu * pm = new QPopupMenu();
68 parent->insertItem(menu.label().c_str(), pm);
71 menubackend_.getMenu(menu.submenu()).expand(md, 0);
72 Menu::const_iterator m = md.begin();
73 Menu::const_iterator end = md.end();
74 for (; m != end; ++m) {
75 if (m->kind() == MenuItem::Separator) {
76 pm->insertSeparator();
78 pm->insertItem(m->label().c_str(), m->action());
84 void Menubar::Pimpl::set(string const & menu_name)
86 lyxerr[Debug::GUI] << "Entering Menubar::Pimpl::set "
87 << "for menu `" << menu_name << "'" << endl;
90 if (menu_name != current_menu_name_) {
91 MenubarMap::iterator mbit = menubarmap_.find(menu_name);
93 if (mbit == menubarmap_.end()) {
94 lyxerr << "ERROR:set: Unknown menu `" << menu_name
100 lyxerr[Debug::GUI] << " hiding group "
101 << current_group_ << endl;
102 fl_hide_object(current_group_);
105 lyxerr[Debug::GUI] << " showing group "
106 << mbit->second << endl;
107 fl_show_object(mbit->second);
108 current_menu_name_ = menu_name;
109 current_group_ = mbit->second;
110 lyxerr[Debug::GUI] << "Menubar::Pimpl::set: Menubar set."
113 lyxerr [Debug::GUI] << "Menubar::Pimpl::set: Nothing to do."
119 void Menubar::Pimpl::openByName(string const & name)
121 lyxerr << "Menubar::Pimpl::openByName: menu " << name << endl;
124 if (menubackend_->getMenu(current_menu_name_).hasSubmenu(name)) {
125 for (ButtonList::const_iterator cit = buttonlist_.begin();
126 cit != buttonlist_.end(); ++cit) {
127 if ((*cit)->item_->submenu() == name) {
128 MenuCallback((*cit)->obj_, 1);