]> git.lyx.org Git - lyx.git/blob - src/ToolbarBackend.h
* src/insets/InsetNote.h:
[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         /// store flags when coming to fullscreen mode
100         Flags before_fullscreen;
101
102         /// read a toolbar from the file
103         ToolbarInfo & read(Lexer &);
104
105 private:
106         /// add toolbar item
107         void add(ToolbarItem const &);
108 };
109
110
111 ///
112 class ToolbarBackend {
113 public:
114         typedef std::vector<ToolbarInfo> Toolbars;
115
116         ToolbarBackend();
117
118         /// iterator for all toolbars
119         Toolbars::const_iterator begin() const { return usedtoolbars.begin(); }
120
121         Toolbars::const_iterator end() const { return usedtoolbars.end(); }
122
123         Toolbars::iterator begin() { return usedtoolbars.begin(); }
124
125         Toolbars::iterator end() { return usedtoolbars.end(); }
126
127         /// read toolbars from the file
128         void readToolbars(Lexer &);
129
130         /// read ui toolbar settings
131         void readToolbarSettings(Lexer &);
132
133         ///
134         ToolbarInfo const * getDefinedToolbarInfo(std::string const & name) const;
135         ///
136         ToolbarInfo * getUsedToolbarInfo(std::string const & name);
137
138         // FIXME should be deleted when every window has its own toolbar config.
139         /// number of toggleFullScreen calls, i.e. number of FullScreen windows.
140         int fullScreenWindows;
141
142 private:
143         /// all the defined toolbars
144         Toolbars toolbars;
145
146         /// toolbars listed
147         Toolbars usedtoolbars;
148 };
149
150 /// The global instance
151 extern ToolbarBackend toolbarbackend;
152
153
154
155 } // namespace lyx
156
157 #endif // TOOLBAR_BACKEND_H