]> git.lyx.org Git - lyx.git/blob - src/ToolbarBackend.h
initial basic context menu support.
[lyx.git] / src / ToolbarBackend.h
1 // -*- C++ -*-
2 /**
3  * \file ToolbarBackend.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Jean-Marc Lasgouttes
8  * \author John Levon
9  *
10  * Full author contact details are available in file CREDITS.
11  */
12
13 #ifndef TOOLBAR_BACKEND_H
14 #define TOOLBAR_BACKEND_H
15
16 #include "FuncRequest.h"
17
18 #include <vector>
19
20
21 namespace lyx {
22
23
24 class Lexer;
25
26 class ToolbarItem {
27 public:
28         enum Type {
29                 /// command/action
30                 COMMAND,
31                 /// the command buffer
32                 MINIBUFFER,
33                 /// adds space between buttons in the toolbar
34                 SEPARATOR,
35                 /// a special combox insead of a button
36                 LAYOUTS,
37                 /// a special widget to insert tabulars
38                 TABLEINSERT,
39                 ///
40                 POPUPMENU,
41                 ///
42                 ICONPALETTE
43         };
44
45         ToolbarItem(Type type,
46                  FuncRequest const & func,
47                  docstring const & label = docstring());
48
49         ToolbarItem(Type type,
50                  std::string const & name = std::string(),
51                  docstring const & label = docstring());
52
53         ~ToolbarItem();
54
55         /// item type
56         Type type_;
57         /// action
58         FuncRequest func_;
59         /// label/tooltip
60         docstring label_;
61         /// name
62         std::string name_;
63 };
64
65
66 ///
67 class ToolbarInfo {
68 public:
69         /// toolbar flags
70         enum Flags {
71                 ON = 1, //< show
72                 OFF = 2, //< do not show
73                 MATH = 4, //< show when in math
74                 TABLE = 8, //< show when in table
75                 TOP = 16, //< show at top
76                 BOTTOM = 32, //< show at bottom
77                 LEFT = 64, //< show at left
78                 RIGHT = 128, //< show at right
79                 REVIEW = 256, //< show when change tracking is enabled
80                 AUTO = 512,  //< only if AUTO is set, when MATH, TABLE and REVIEW is used
81                 MATHMACROTEMPLATE = 1024 //< show in math macro template
82         };
83         /// the toolbar items
84         typedef std::vector<ToolbarItem> Items;
85
86         typedef Items::const_iterator item_iterator;
87
88         explicit ToolbarInfo(std::string const & name = std::string())
89                 : name(name) {}
90
91         /// toolbar name
92         std::string name;
93         /// toolbar GUI name
94         std::string gui_name;
95         /// toolbar contents
96         Items items;
97         /// flags
98         Flags flags;
99
100         /// read a toolbar from the file
101         ToolbarInfo & read(Lexer &);
102
103 private:
104         /// add toolbar item
105         void add(ToolbarItem const &);
106 };
107
108
109 ///
110 class ToolbarBackend {
111 public:
112         typedef std::vector<ToolbarInfo> Toolbars;
113
114         ToolbarBackend();
115
116         /// iterator for all toolbars
117         Toolbars::const_iterator begin() const { return usedtoolbars.begin(); }
118
119         Toolbars::const_iterator end() const { return usedtoolbars.end(); }
120
121         Toolbars::iterator begin() { return usedtoolbars.begin(); }
122
123         Toolbars::iterator end() { return usedtoolbars.end(); }
124
125         /// read toolbars from the file
126         void readToolbars(Lexer &);
127
128         /// read ui toolbar settings
129         void readToolbarSettings(Lexer &);
130
131         ///
132         ToolbarInfo const * getDefinedToolbarInfo(std::string const & name) const;
133         ///
134         ToolbarInfo * getUsedToolbarInfo(std::string const & name);
135
136 private:
137         /// all the defined toolbars
138         Toolbars toolbars;
139
140         /// toolbars listed
141         Toolbars usedtoolbars;
142 };
143
144 /// The global instance
145 extern ToolbarBackend toolbarbackend;
146
147
148
149 } // namespace lyx
150
151 #endif // TOOLBAR_BACKEND_H