]> git.lyx.org Git - lyx.git/blob - src/frontends/Toolbars.h
* src/frontends/qt4/GuiSelection.C
[lyx.git] / src / frontends / Toolbars.h
1 // -*- C++ -*-
2 /**
3  * \file Toolbars.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Lars Gullik Bjønnes
8  * \author Angus Leeming
9  *
10  * Full author contact details are available in file CREDITS.
11  *
12  * The Toolbars class is a container of toolbars.
13  * It provides accessors to each Toolbar and to the LayoutBox.
14  *
15  * Each GUI frontend should provide toolbar and layout boxes by derivation
16  * from the LayoutBox and Toolbar pure abstract classes.
17  *
18  * The Toolbars class has no knowledge at all of the details of each
19  * frontend's implementation, which requires that each frontend should
20  * provide a 'make_toolbar' function, signature below.
21  */
22
23 #ifndef TOOLBARS_H
24 #define TOOLBARS_H
25
26 #include "ToolbarBackend.h"
27 #include <boost/shared_ptr.hpp>
28 #include <map>
29 #include "session.h"
30
31
32 namespace lyx {
33
34 class LyXView;
35
36 class LayoutBox {
37 public:
38         virtual ~LayoutBox() {}
39         /// Select the correct layout in the combox.
40         virtual void set(std::string const & layout) = 0;
41         /// Populate the layout combox.
42         virtual void update() = 0;
43         /// Erase the layout list.
44         virtual void clear() = 0;
45         /// Display the layout list.
46         virtual void open() = 0;
47         /// Set the activation status of the combox.
48         virtual void setEnabled(bool) = 0;
49 };
50
51
52 class Toolbar {
53 public:
54         virtual ~Toolbar() {}
55         /// Add a button to the bar.
56         virtual void add(FuncRequest const & func, docstring const & tooltip) = 0;
57
58         /** Hide the bar.
59          *  \param update_metrics is a hint to the layout engine that the
60          *  metrics should be updated.
61          */
62         virtual void hide(bool update_metrics) = 0;
63         /** Show the bar.
64          *  \param update_metrics is a hint to the layout engine that the
65          *  metrics should be updated.
66          */
67         virtual void show(bool update_metrics) = 0;
68         /** update toolbar information
69         * ToolbarInfo will then be saved by session
70         */
71         virtual void saveInfo(ToolbarSection::ToolbarInfo & info) = 0;
72
73         /// Refresh the contents of the bar.
74         virtual void update() = 0;
75         /// Accessor to the layout combox, if any.
76         virtual LayoutBox * layout() const = 0;
77 };
78
79
80 class Toolbars {
81 public:
82         ///
83         Toolbars(LyXView & owner);
84
85         /// Initialize the toolbars using the backend database.
86         void init();
87
88         /// Show/hide the named toolbar.
89         void display(std::string const & name, bool show);
90
91         /// get toolbar state (on/off/auto)
92         ToolbarBackend::Flags getToolbarState(std::string const & name);
93         
94         /// toggle the state of toolbars (on/off/auto)
95         void toggleToolbarState(std::string const & name);
96
97         /// Update the state of the toolbars.
98         void update(bool in_math, bool in_table, bool review);
99
100         /// save toolbar information
101         void saveToolbarInfo();
102
103         /// Select the right layout in the combox.
104         void setLayout(std::string const & layout);
105
106         /** Populate the layout combox - returns whether we did a full
107          *  update or not
108          */
109         bool updateLayoutList(int textclass);
110
111         /// Drop down the layout list.
112         void openLayoutList();
113         /// Erase the layout list.
114         void clearLayoutList();
115
116         ///
117         typedef boost::shared_ptr<Toolbar> ToolbarPtr;
118
119 private:
120         /// Add a new toolbar.
121         void add(ToolbarBackend::Toolbar const & tb);
122         /// Show or hide a toolbar.
123         void displayToolbar(ToolbarBackend::Toolbar const & tb, bool show);
124         /// Update the state of the icons
125         void update();
126
127         /// The parent window.
128         LyXView & owner_;
129
130         /** The layout box is actually owned by whichever toolbar
131          *  contains it. All the Toolbars class needs is a means of
132          *  accessing it.
133          *
134          *  We don't need to use boost::weak_ptr here because the toolbars
135          *  are also stored here. There are, therefore, no lifetime issues.
136          */
137         LayoutBox * layout_;
138
139         /// Toolbar store providing access to individual toolbars by name.
140         typedef std::map<std::string, ToolbarPtr> ToolbarsMap;
141         ToolbarsMap toolbars_;
142
143         /// The last textclass layout list in the layout choice selector
144         int last_textclass_;
145
146         // load flags with saved values
147         void initFlags(ToolbarBackend::Toolbar & tbb);
148 };
149
150 /// Set the layout in the kernel when an entry has been selected
151 void layoutSelected(LyXView & lv, std::string const & name);
152
153
154 } // namespace lyx
155
156 #endif // NOT TOOLBARS_H