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