]> git.lyx.org Git - lyx.git/blob - src/frontends/qt2/Menubar_pimpl.h
Step by step ..
[lyx.git] / src / frontends / qt2 / Menubar_pimpl.h
1 // -*- C++ -*-
2 /**
3  * \file Menubar_pimpl.h
4  * Copyright 2002 the LyX Team
5  * Read the file COPYING
6  *
7  * \author Lars Gullik Bjønnes <larsbj@lyx.org>
8  * \author John Levon <moz@compsoc.man.ac.uk>
9  */
10
11  
12 #ifndef MENUBAR_PIMPL_H
13 #define MENUBAR_PIMPL_H
14
15 #include <vector>
16 #include <map>
17
18 #include <config.h>
19  
20 #ifdef __GNUG__
21 #pragma interface
22 #endif
23
24 #include "LString.h"
25 #include "frontends/Menubar.h"
26 #include "commandtags.h"
27
28 class LyXView;
29 class QtView;
30 class QMenuData;
31 class QPopupMenu;
32 class Menu;
33 class MenuItem;
34 class MenuBackend;
35
36 /// stored state for menu items
37 struct MenuItemInfo {
38         // I REALLY hate this stupid requirement of std::map
39         MenuItemInfo::MenuItemInfo()
40                 : parent_(0), id_(0), item_(0) {};
41  
42         MenuItemInfo::MenuItemInfo(QMenuData * p, int id, MenuItem const * item)
43                 : parent_(p), id_(id), item_(item) {};
44  
45         /// menu containing item
46         QMenuData * parent_;
47  
48         /// id in containing menu
49         int id_;
50  
51         /// LyX info for item
52         MenuItem const * item_;
53 };
54  
55
56 struct Menubar::Pimpl {
57 public:
58         Pimpl(LyXView *, MenuBackend const &);
59  
60         /// opens a top-level submenu given its name
61         void openByName(string const &);
62
63         /// update the state of the menuitems
64         void update();
65
66 private:
67         /// create a menu
68         QPopupMenu * createMenu(QMenuData * parent, MenuItem const * item);
69  
70         /// populate a menu (recursively)
71         void fillMenu(QMenuData * qmenu, Menu const & menu);
72  
73         /// special handling updating a submenu label
74         void updateSubmenu(MenuItemInfo const & i);
75  
76         /// update an individual item, returns true if enabled
77         void updateItem(MenuItemInfo const & i);
78
79         /// owning view
80         QtView * owner_;
81
82         /// menu controller
83         MenuBackend const & menubackend_;
84
85         typedef std::map<string, MenuItemInfo> ItemMap;
86
87         /// menu items
88         ItemMap items_;
89 };
90  
91 #endif // MENUBAR_PIMPL_H