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