]> git.lyx.org Git - lyx.git/blob - src/frontends/qt2/Menubar_pimpl.C
compile fies, tiny QToc improvement
[lyx.git] / src / frontends / qt2 / Menubar_pimpl.C
1 /**
2  * \file Menubar_pimpl.C
3  * Copyright 1999-2001 The LyX Team.
4  * See the file COPYING.
5  *
6  * \author  Lars Gullik Bjønnes, larsbj@lyx.org
7  */
8
9 #include <config.h>
10
11 #include <algorithm>
12
13 #ifdef __GNUG__
14 #pragma implementation
15 #endif
16
17 #include "Menubar_pimpl.h"
18 #include "MenuBackend.h"
19 #include "LyXAction.h"
20 #include "kbmap.h"
21 #include "buffer.h"
22 #include "Dialogs.h"
23 #include "lyxfunc.h"
24 #include "FloatList.h"
25 #include "support/lstrings.h"
26 #include "support/LAssert.h"
27 #include "gettext.h"
28 #include "debug.h"
29
30 #include "QtView.h"
31  
32 #include <qmenubar.h>
33 #include <qpopupmenu.h>
34  
35 using std::endl;
36 using std::vector;
37 using std::max;
38 using std::min;
39 using std::for_each;
40
41 typedef vector<int>::size_type size_type;
42
43 extern boost::scoped_ptr<kb_keymap> toplevel_keymap;
44 extern LyXAction lyxaction;
45
46
47 Menubar::Pimpl::Pimpl(LyXView * view, MenuBackend const & mbe) 
48         : owner_(static_cast<QtView*>(view)), menubackend_(mbe)
49 {
50         Menu::const_iterator m = mbe.getMenubar().begin();
51         Menu::const_iterator end = mbe.getMenubar().end();
52         for (; m != end; ++m) {
53                 makeMenu(owner_->menuBar(), *m);
54         }
55 }
56
57
58 void Menubar::Pimpl::makeMenu(QMenuData * parent, MenuItem const & menu)
59 {
60         // FIXME: leak
61         QPopupMenu * pm = new QPopupMenu();
62         parent->insertItem(menu.label().c_str(), pm);
63  
64         Menu md;
65         menubackend_.getMenu(menu.submenu()).expand(md, 0);
66         Menu::const_iterator m = md.begin();
67         Menu::const_iterator end = md.end();
68         for (; m != end; ++m) {
69                 if (m->kind() == MenuItem::Separator) {
70                         pm->insertSeparator();
71                 } else {
72                         pm->insertItem(m->label().c_str(), m->action());
73                 } 
74         }
75 }
76
77  
78 void Menubar::Pimpl::openByName(string const & name)
79 {
80         lyxerr << "Menubar::Pimpl::openByName: menu " << name << endl;
81
82 #if 0
83         if (menubackend_->getMenu(current_menu_name_).hasSubmenu(name)) {
84                 for (ButtonList::const_iterator cit = buttonlist_.begin();
85                      cit != buttonlist_.end(); ++cit) {
86                         if ((*cit)->item_->submenu() == name) {
87                                 MenuCallback((*cit)->obj_, 1);
88                                 return;
89                         }
90                 }
91         }
92 #endif
93 }