]> git.lyx.org Git - lyx.git/blob - src/frontends/controllers/ControlCharacter.C
Switch from SigC signals to boost::signals
[lyx.git] / src / frontends / controllers / ControlCharacter.C
1 /**
2  * \file ControlCharacter.C
3  * Copyright 2001 The LyX Team.
4  * See the file COPYING.
5  *
6  * \author Angus Leeming, a.leeming@ic.ac.uk
7  */
8
9 #include <config.h>
10
11 #ifdef __GNUG__
12 #pragma implementation
13 #endif
14
15 #include "ControlCharacter.h"
16 #include "ViewBase.h"
17 #include "ButtonControllerBase.h"
18 #include "buffer.h"
19 #include "Dialogs.h"
20 #include "Liason.h"
21 #include "bufferview_funcs.h" // ToggleAndShow
22 #include "gettext.h"
23 #include "language.h"
24 #include "BufferView.h"
25
26 #include "frontends/LyXView.h"
27
28 #include <boost/bind.hpp>
29
30 #include <vector>
31
32 using Liason::setMinibuffer;
33 using std::vector;
34
35
36 ControlCharacter::ControlCharacter(LyXView & lv, Dialogs & d)
37         : ControlDialogBD(lv, d),
38           font_(0), toggleall_(false)
39 {
40         d_.showCharacter = boost::bind(&ControlCharacter::show, this);
41         d_.setUserFreeFont = boost::bind(&ControlCharacter::apply, this);
42 }
43
44
45 void ControlCharacter::setParams()
46 {
47         // Do this the first time only. Used as a flag for whether or not the
48         // view has been built
49         if (!font_.get())
50                 font_.reset(new LyXFont(LyXFont::ALL_IGNORE));
51
52         // so that the user can press Ok
53         if (getFamily()   != LyXFont::IGNORE_FAMILY ||
54             getSeries()   != LyXFont::IGNORE_SERIES ||
55             getShape()    != LyXFont::IGNORE_SHAPE  ||
56             getSize()     != LyXFont::IGNORE_SIZE ||
57             getBar()      != frnt::IGNORE ||
58             getColor()    != LColor::ignore ||
59             font_->language() != ignore_language)
60                 bc().valid();
61 }
62
63
64 void ControlCharacter::apply()
65 {
66         // Nothing to apply. (Can be called from the Toolbar.)
67         if (!font_.get())
68                 return;
69
70         // Apply from the view if it's visible. Otherwise, use the stored values
71         if (lv_.view()->available())
72                 view().apply();
73
74         toggleAndShow(lv_.view(), *(font_.get()), toggleall_);
75         lv_.view()->setState();
76         lv_.buffer()->markDirty();
77         setMinibuffer(&lv_, _("Character set"));
78 }
79
80
81 LyXFont::FONT_FAMILY ControlCharacter::getFamily() const
82 {
83         if (!font_.get())
84                 return LyXFont::IGNORE_FAMILY;
85         return font_->family();
86 }
87
88
89 void ControlCharacter::setFamily(LyXFont::FONT_FAMILY val)
90 {
91         font_->setFamily(val);
92 }
93
94
95 LyXFont::FONT_SERIES ControlCharacter::getSeries() const
96 {
97         if (!font_.get())
98                 return LyXFont::IGNORE_SERIES;
99         return font_->series();
100 }
101
102
103 void ControlCharacter::setSeries(LyXFont::FONT_SERIES val)
104 {
105         font_->setSeries(val);
106 }
107
108
109 LyXFont::FONT_SHAPE ControlCharacter::getShape() const
110 {
111         if (!font_.get())
112                 return LyXFont::IGNORE_SHAPE;
113         return font_->shape();
114 }
115
116
117 void ControlCharacter::setShape(LyXFont::FONT_SHAPE val)
118 {
119         font_->setShape(val);
120 }
121
122
123 LyXFont::FONT_SIZE ControlCharacter::getSize() const
124 {
125         if (!font_.get())
126                 return LyXFont::IGNORE_SIZE;
127         return font_->size();
128 }
129
130
131 void ControlCharacter::setSize(LyXFont::FONT_SIZE val)
132 {
133         font_->setSize(val);
134 }
135
136
137 frnt::FONT_STATE ControlCharacter::getBar() const
138 {
139         if (!font_.get())
140                 return frnt::IGNORE;
141
142         if (font_->emph() == LyXFont::TOGGLE)
143                 return frnt::EMPH_TOGGLE;
144
145         if (font_->underbar() == LyXFont::TOGGLE)
146                 return frnt::UNDERBAR_TOGGLE;
147
148         if (font_->noun() == LyXFont::TOGGLE)
149                 return frnt::NOUN_TOGGLE;
150
151         if (font_->emph() == LyXFont::IGNORE &&
152             font_->underbar() == LyXFont::IGNORE &&
153             font_->noun() == LyXFont::IGNORE)
154                 return frnt::IGNORE;
155
156         return frnt::INHERIT;
157 }
158
159
160 void ControlCharacter::setBar(frnt::FONT_STATE val)
161 {
162         switch (val) {
163         case frnt::IGNORE:
164                 font_->setEmph(LyXFont::IGNORE);
165                 font_->setUnderbar(LyXFont::IGNORE);
166                 font_->setNoun(LyXFont::IGNORE);
167                 break;
168
169         case frnt::EMPH_TOGGLE:
170                 font_->setEmph(LyXFont::TOGGLE);
171                 break;
172
173         case frnt::UNDERBAR_TOGGLE:
174                 font_->setUnderbar(LyXFont::TOGGLE);
175                 break;
176
177         case frnt::NOUN_TOGGLE:
178                 font_->setNoun(LyXFont::TOGGLE);
179                 break;
180
181         case frnt::INHERIT:
182                 font_->setEmph(LyXFont::INHERIT);
183                 font_->setUnderbar(LyXFont::INHERIT);
184                 font_->setNoun(LyXFont::INHERIT);
185                 break;
186         }
187 }
188
189
190 LColor::color ControlCharacter::getColor() const
191 {
192         if (!font_.get())
193                 return LColor::ignore;
194
195         return font_->color();
196 }
197
198
199 void ControlCharacter::setColor(LColor::color val)
200 {
201         switch (val) {
202         case LColor::ignore:
203         case LColor::none:
204         case LColor::black:
205         case LColor::white:
206         case LColor::red:
207         case LColor::green:
208         case LColor::blue:
209         case LColor::cyan:
210         case LColor::magenta:
211         case LColor::yellow:
212         case LColor::inherit:
213                 font_->setColor(val);
214                 break;
215         default:
216                 break;
217         }
218 }
219
220
221 string ControlCharacter::getLanguage() const
222 {
223         if (font_.get() && font_->language())
224                 return font_->language()->lang();
225         return "ignore";
226 }
227
228
229 void ControlCharacter::setLanguage(string const & val)
230 {
231         if (val == "ignore")
232                 font_->setLanguage(ignore_language);
233
234         else if (val == "reset")
235                 font_->setLanguage(lv_.buffer()->params.language);
236
237         else
238                 font_->setLanguage(languages.getLanguage(val));
239 }
240
241
242 bool ControlCharacter::getToggleAll() const
243 {
244         return toggleall_;
245 }
246
247
248 void ControlCharacter::setToggleAll(bool t)
249 {
250         toggleall_ = t;
251 }