]> git.lyx.org Git - lyx.git/blob - src/frontends/controllers/ControlCharacter.C
* Give Dialog::Controller::initialiseParams a bool return type.
[lyx.git] / src / frontends / controllers / ControlCharacter.C
1 /**
2  * \file ControlCharacter.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Angus Leeming
7  *
8  * Full author contact details are available in file CREDITS
9  */
10
11 #include <config.h>
12
13 #include "ControlCharacter.h"
14 #include "ButtonController.h"
15
16 #include "buffer.h"
17 #include "bufferview_funcs.h"
18 #include "funcrequest.h"
19 #include "gettext.h"
20 #include "language.h"
21
22
23 ControlCharacter::ControlCharacter(Dialog & parent)
24         : Dialog::Controller(parent),
25           font_(0), toggleall_(false)
26 {}
27
28
29 bool ControlCharacter::initialiseParams(string const &)
30 {
31         // Do this the first time only.
32         if (!font_.get())
33                 font_.reset(new LyXFont(LyXFont::ALL_IGNORE));
34
35         // so that the user can press Ok
36         if (getFamily()   != LyXFont::IGNORE_FAMILY ||
37             getSeries()   != LyXFont::IGNORE_SERIES ||
38             getShape()    != LyXFont::IGNORE_SHAPE  ||
39             getSize()     != LyXFont::IGNORE_SIZE ||
40             getBar()      != frnt::IGNORE ||
41             getColor()    != LColor::ignore ||
42             font_->language() != ignore_language)
43                 dialog().bc().valid();
44
45         return true;
46 }
47
48
49 void ControlCharacter::clearParams()
50 {}
51
52
53 void ControlCharacter::dispatchParams()
54 {
55         // Nothing to dispatch. (Can be called from the Toolbar.)
56         if (!font_.get())
57                 return;
58
59         string data;
60         if (font2string(*font_.get(), toggleall_, data)) {
61                 kernel().dispatch(FuncRequest(LFUN_FREEFONT_UPDATE, data));
62         }
63 }
64
65
66 LyXFont::FONT_FAMILY ControlCharacter::getFamily() const
67 {
68         if (!font_.get())
69                 return LyXFont::IGNORE_FAMILY;
70         return font_->family();
71 }
72
73
74 void ControlCharacter::setFamily(LyXFont::FONT_FAMILY val)
75 {
76         font_->setFamily(val);
77 }
78
79
80 LyXFont::FONT_SERIES ControlCharacter::getSeries() const
81 {
82         if (!font_.get())
83                 return LyXFont::IGNORE_SERIES;
84         return font_->series();
85 }
86
87
88 void ControlCharacter::setSeries(LyXFont::FONT_SERIES val)
89 {
90         font_->setSeries(val);
91 }
92
93
94 LyXFont::FONT_SHAPE ControlCharacter::getShape() const
95 {
96         if (!font_.get())
97                 return LyXFont::IGNORE_SHAPE;
98         return font_->shape();
99 }
100
101
102 void ControlCharacter::setShape(LyXFont::FONT_SHAPE val)
103 {
104         font_->setShape(val);
105 }
106
107
108 LyXFont::FONT_SIZE ControlCharacter::getSize() const
109 {
110         if (!font_.get())
111                 return LyXFont::IGNORE_SIZE;
112         return font_->size();
113 }
114
115
116 void ControlCharacter::setSize(LyXFont::FONT_SIZE val)
117 {
118         font_->setSize(val);
119 }
120
121
122 frnt::FONT_STATE ControlCharacter::getBar() const
123 {
124         if (!font_.get())
125                 return frnt::IGNORE;
126
127         if (font_->emph() == LyXFont::TOGGLE)
128                 return frnt::EMPH_TOGGLE;
129
130         if (font_->underbar() == LyXFont::TOGGLE)
131                 return frnt::UNDERBAR_TOGGLE;
132
133         if (font_->noun() == LyXFont::TOGGLE)
134                 return frnt::NOUN_TOGGLE;
135
136         if (font_->emph() == LyXFont::IGNORE &&
137             font_->underbar() == LyXFont::IGNORE &&
138             font_->noun() == LyXFont::IGNORE)
139                 return frnt::IGNORE;
140
141         return frnt::INHERIT;
142 }
143
144
145 void ControlCharacter::setBar(frnt::FONT_STATE val)
146 {
147         switch (val) {
148         case frnt::IGNORE:
149                 font_->setEmph(LyXFont::IGNORE);
150                 font_->setUnderbar(LyXFont::IGNORE);
151                 font_->setNoun(LyXFont::IGNORE);
152                 break;
153
154         case frnt::EMPH_TOGGLE:
155                 font_->setEmph(LyXFont::TOGGLE);
156                 break;
157
158         case frnt::UNDERBAR_TOGGLE:
159                 font_->setUnderbar(LyXFont::TOGGLE);
160                 break;
161
162         case frnt::NOUN_TOGGLE:
163                 font_->setNoun(LyXFont::TOGGLE);
164                 break;
165
166         case frnt::INHERIT:
167                 font_->setEmph(LyXFont::INHERIT);
168                 font_->setUnderbar(LyXFont::INHERIT);
169                 font_->setNoun(LyXFont::INHERIT);
170                 break;
171         }
172 }
173
174
175 LColor::color ControlCharacter::getColor() const
176 {
177         if (!font_.get())
178                 return LColor::ignore;
179
180         return font_->color();
181 }
182
183
184 void ControlCharacter::setColor(LColor::color val)
185 {
186         switch (val) {
187         case LColor::ignore:
188         case LColor::none:
189         case LColor::black:
190         case LColor::white:
191         case LColor::red:
192         case LColor::green:
193         case LColor::blue:
194         case LColor::cyan:
195         case LColor::magenta:
196         case LColor::yellow:
197         case LColor::inherit:
198                 font_->setColor(val);
199                 break;
200         default:
201                 break;
202         }
203 }
204
205
206 string ControlCharacter::getLanguage() const
207 {
208         if (font_.get() && font_->language())
209                 return font_->language()->lang();
210         return "ignore";
211 }
212
213
214 void ControlCharacter::setLanguage(string const & val)
215 {
216         if (val == "ignore")
217                 font_->setLanguage(ignore_language);
218
219         else if (val == "reset")
220                 font_->setLanguage(kernel().buffer()->params.language);
221
222         else
223                 font_->setLanguage(languages.getLanguage(val));
224 }
225
226
227 bool ControlCharacter::getToggleAll() const
228 {
229         return toggleall_;
230 }
231
232
233 void ControlCharacter::setToggleAll(bool t)
234 {
235         toggleall_ = t;
236 }