]> git.lyx.org Git - lyx.git/blob - src/frontends/controllers/ControlCharacter.C
Implementation of controller-view split for FormCharacter.
[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@.ac.uk
7  */
8
9 #include <vector>
10
11 #ifdef __GNUG_
12 #pragma implementation
13 #endif
14
15 #include <config.h>
16
17 #include "ControlCharacter.h"
18 #include "bufferview_funcs.h"
19 #include "Dialogs.h"
20 #include "Liason.h"
21 #include "LyXView.h"
22 #include "buffer.h"
23 #include "lyxtext.h"
24 #include "language.h"
25
26 using Liason::setMinibuffer;
27 using SigC::slot;
28 using std::vector;
29
30 ControlCharacter::ControlCharacter(LyXView & lv, Dialogs & d)
31         : ControlConnectBD(lv, d), font_(0), toggleall_(false)
32 {
33         d.showLayoutCharacter.connect(slot(this, &ControlCharacter::show));
34         d.setUserFreeFont.connect(slot(this, &ControlCharacter::apply));
35 }
36
37
38 void ControlCharacter::show()
39 {
40         if (!lv_.view()->available()) return;
41
42         if (font_) delete font_;
43         font_ = new LyXFont(LyXFont::ALL_IGNORE);
44
45         bc().readOnly(isReadonly());
46         view().show();
47 }
48
49
50 void ControlCharacter::update()
51 {
52         if (!lv_.view()->available()) return;
53
54         if (font_) delete font_;
55         font_ = new LyXFont(LyXFont::ALL_IGNORE);
56
57         bc().readOnly(isReadonly());
58         view().update();
59 }
60
61
62 void ControlCharacter::hide()
63 {
64         if (font_) {
65                 delete font_;
66                 font_ = 0;
67         }
68
69         disconnect();
70         view().hide();
71 }
72
73
74 void ControlCharacter::apply()
75 {
76         if (!lv_.view()->available())
77                 return;
78    
79         view().apply();
80
81         ToggleAndShow(lv_.view(), *font_, toggleall_);
82         lv_.view()->setState();
83         lv_.buffer()->markDirty();
84         setMinibuffer(&lv_, _("Character set"));
85 }
86
87
88 void ControlCharacter::setFamily(LyXFont::FONT_FAMILY val)
89 {
90         font_->setFamily(val);
91 }
92
93 void ControlCharacter::setSeries(LyXFont::FONT_SERIES val)
94 {
95         font_->setSeries(val);
96 }
97
98 void ControlCharacter::setShape(LyXFont::FONT_SHAPE val)
99 {
100         font_->setShape(val);
101 }
102
103 void ControlCharacter::setSize(LyXFont::FONT_SIZE val)
104 {
105         font_->setSize(val);
106 }
107
108 void ControlCharacter::setBar(ControlCharacter::FONT_STATE val)
109 {
110         switch (val) {
111         case IGNORE:
112                 font_->setEmph(LyXFont::IGNORE);
113                 font_->setUnderbar(LyXFont::IGNORE);
114                 font_->setNoun(LyXFont::IGNORE);
115                 font_->setLatex(LyXFont::IGNORE);
116                 break;
117
118         case EMPH_TOGGLE:
119                 font_->setEmph(LyXFont::TOGGLE);
120                 break;
121
122         case UNDERBAR_TOGGLE:
123                 font_->setUnderbar(LyXFont::TOGGLE);
124                 break;
125
126         case NOUN_TOGGLE:
127                 font_->setNoun(LyXFont::TOGGLE);
128                 break;
129
130         case LATEX_TOGGLE:
131                 font_->setLatex(LyXFont::TOGGLE);
132                 break;
133
134         case INHERIT:
135                 font_->setEmph(LyXFont::INHERIT);
136                 font_->setUnderbar(LyXFont::INHERIT);
137                 font_->setNoun(LyXFont::INHERIT);
138                 font_->setLatex(LyXFont::INHERIT);
139                 break;
140         }
141 }
142
143 void ControlCharacter::setColor(LColor::color val)
144 {
145         switch (val) {
146         case LColor::ignore:
147         case LColor::none:
148         case LColor::black:
149         case LColor::white:
150         case LColor::red:
151         case LColor::green:
152         case LColor::blue:
153         case LColor::cyan:
154         case LColor::magenta:
155         case LColor::yellow:
156         case LColor::inherit:
157                 font_->setColor(val);
158                 break;
159
160         default:
161                 break;
162         }
163 }
164
165         
166 void ControlCharacter::setLanguage(string const & val)
167 {
168         if (val == _("No change"))
169                 font_->setLanguage(ignore_language);
170
171         else if ( val == _("Reset"))
172                 font_->setLanguage(lv_.buffer()->params.language);
173
174         else
175                 font_->setLanguage(languages.getLanguage(val));
176 }
177
178 void ControlCharacter::setToggleAll(bool t)
179 {
180         toggleall_ = t;
181 }
182
183
184 vector<ControlCharacter::FamilyPair> const getFamilyData()
185 {
186         vector<ControlCharacter::FamilyPair> family(5);
187
188         ControlCharacter::FamilyPair pr;
189         pr.first = _("No change");  pr.second = LyXFont::IGNORE_FAMILY;
190         family[0] = pr;
191         pr.first = _("Roman");      pr.second = LyXFont::ROMAN_FAMILY;
192         family[1] = pr;
193         pr.first = _("Sans Serif"); pr.second = LyXFont::SANS_FAMILY;
194         family[2] = pr;
195         pr.first = _("Typewriter"); pr.second = LyXFont::TYPEWRITER_FAMILY;
196         family[3] = pr;
197         pr.first = _("Reset");      pr.second = LyXFont::INHERIT_FAMILY;
198         family[4] = pr;
199
200         return family;
201 }
202
203
204 vector<ControlCharacter::SeriesPair> const getSeriesData()
205 {
206         vector<ControlCharacter::SeriesPair> series(4);
207
208         ControlCharacter::SeriesPair pr;
209         pr.first = _("No change"); pr.second = LyXFont::IGNORE_SERIES;
210         series[0] = pr;
211         pr.first = _("Medium");    pr.second = LyXFont::MEDIUM_SERIES;
212         series[1] = pr;
213         pr.first = _("Bold");      pr.second = LyXFont::BOLD_SERIES;
214         series[2] = pr;
215         pr.first = _("Reset");     pr.second = LyXFont::INHERIT_SERIES;
216         series[3] = pr;
217         
218         return series;
219 }
220
221
222 vector<ControlCharacter::ShapePair> const getShapeData()
223 {
224         vector<ControlCharacter::ShapePair> shape(6);
225
226         ControlCharacter::ShapePair pr;
227         pr.first = _("No change");  pr.second = LyXFont::IGNORE_SHAPE;
228         shape[0] = pr;
229         pr.first = _("Upright");    pr.second = LyXFont::UP_SHAPE;
230         shape[1] = pr;
231         pr.first = _("Italic");     pr.second = LyXFont::ITALIC_SHAPE;
232         shape[2] = pr;
233         pr.first = _("Slanted");    pr.second = LyXFont::SLANTED_SHAPE;
234         shape[3] = pr;
235         pr.first = _("Small Caps"); pr.second = LyXFont::SMALLCAPS_SHAPE;
236         shape[4] = pr;
237         pr.first = _("Reset");      pr.second = LyXFont::INHERIT_SHAPE;
238         shape[5] = pr;
239         
240         return shape;
241 }
242
243
244 vector<ControlCharacter::SizePair> const getSizeData()
245 {
246         vector<ControlCharacter::SizePair> size(14);
247
248         ControlCharacter::SizePair pr;
249         pr.first = _("No change"); pr.second = LyXFont::IGNORE_SIZE;
250         size[0] = pr;
251         pr.first = _("Tiny");      pr.second = LyXFont::SIZE_TINY;
252         size[1] = pr;
253         pr.first = _("Smallest");  pr.second = LyXFont::SIZE_SCRIPT;
254         size[2] = pr;
255         pr.first = _("Smaller");   pr.second = LyXFont::SIZE_FOOTNOTE;
256         size[3] = pr;
257         pr.first = _("Small");     pr.second = LyXFont::SIZE_SMALL;
258         size[4] = pr;
259         pr.first = _("Normal");    pr.second = LyXFont::SIZE_NORMAL;
260         size[5] = pr;
261         pr.first = _("Large");     pr.second = LyXFont::SIZE_LARGE;
262         size[6] = pr;
263         pr.first = _("Larger");    pr.second = LyXFont::SIZE_LARGER;
264         size[7] = pr;
265         pr.first = _("Largest");   pr.second = LyXFont::SIZE_LARGEST;
266         size[8] = pr;
267         pr.first = _("Huge");      pr.second = LyXFont::SIZE_HUGE;
268         size[9] = pr;
269         pr.first = _("Huger");     pr.second = LyXFont::SIZE_HUGER;
270         size[10] = pr;
271         pr.first = _("Increase");  pr.second = LyXFont::INCREASE_SIZE;
272         size[11] = pr;
273         pr.first = _("Decrease");  pr.second = LyXFont::DECREASE_SIZE;
274         size[12] = pr;
275         pr.first = _("Reset");     pr.second = LyXFont::INHERIT_SIZE;
276         size[13] = pr;
277         
278         return size;
279 }
280
281
282 vector<ControlCharacter::BarPair> const getBarData()
283 {
284         vector<ControlCharacter::BarPair> bar(6);
285
286         ControlCharacter::BarPair pr;
287         pr.first = _("No change");  pr.second = ControlCharacter::IGNORE;
288         bar[0] = pr;
289         pr.first = _("Emph");       pr.second = ControlCharacter::EMPH_TOGGLE;
290         bar[1] = pr;
291         pr.first = _("Underbar");   pr.second = ControlCharacter::UNDERBAR_TOGGLE;
292         bar[2] = pr;
293         pr.first = _("Noun");       pr.second = ControlCharacter::NOUN_TOGGLE;
294         bar[3] = pr;
295         pr.first = _("LaTeX mode"); pr.second = ControlCharacter::LATEX_TOGGLE;
296         bar[4] = pr;
297         pr.first = _("Reset");      pr.second = ControlCharacter::INHERIT;
298         bar[5] = pr;
299         
300         return bar;
301 }
302
303
304 vector<ControlCharacter::ColorPair> const getColorData()
305 {
306         vector<ControlCharacter::ColorPair> color(11);
307
308         ControlCharacter::ColorPair pr;
309         pr.first = _("No change"); pr.second = LColor::ignore;
310         color[0] = pr;
311         pr.first = _("No color");  pr.second = LColor::none;
312         color[1] = pr;
313         pr.first = _("Black");     pr.second = LColor::black;
314         color[2] = pr;
315         pr.first = _("White");     pr.second = LColor::white;
316         color[3] = pr;
317         pr.first = _("Red");       pr.second = LColor::red;
318         color[4] = pr;
319         pr.first = _("Green");     pr.second = LColor::green;
320         color[5] = pr;
321         pr.first = _("Blue");      pr.second = LColor::blue;
322         color[6] = pr;
323         pr.first = _("Cyan");      pr.second = LColor::cyan;
324         color[7] = pr;
325         pr.first = _("Magenta");   pr.second = LColor::magenta;
326         color[8] = pr;
327         pr.first = _("Yellow");    pr.second = LColor::yellow;
328         color[9] = pr;
329         pr.first = _("Reset");     pr.second = LColor::inherit;
330         color[10] = pr;
331         
332         return color;
333 }
334
335
336 vector<string> const getLanguageData()
337 {
338         vector<string> langs(languages.size() + 2);
339
340         langs[0] = _("No change");
341         langs[1] = _("Reset");
342
343         vector<string>::size_type i = 1;
344         for (Languages::const_iterator cit = languages.begin(); 
345              cit != languages.end(); ++cit) {
346                 langs[++i] = cit->second.lang();
347         }
348
349         return langs;
350 }