]> git.lyx.org Git - lyx.git/blob - src/frontends/controllers/ControlCharacter.C
Yesterday's character dialog patch
[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 void 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
46
47 void ControlCharacter::clearParams()
48 {}
49
50
51 void ControlCharacter::dispatchParams()
52 {
53         // Nothing to dispatch. (Can be called from the Toolbar.)
54         if (!font_.get())
55                 return;
56
57         string data;
58         if (font2string(*font_.get(), toggleall_, data)) {
59                 kernel().dispatch(FuncRequest(LFUN_FREEFONT_UPDATE, data));
60         }
61 }
62
63
64 LyXFont::FONT_FAMILY ControlCharacter::getFamily() const
65 {
66         if (!font_.get())
67                 return LyXFont::IGNORE_FAMILY;
68         return font_->family();
69 }
70
71
72 void ControlCharacter::setFamily(LyXFont::FONT_FAMILY val)
73 {
74         font_->setFamily(val);
75 }
76
77
78 LyXFont::FONT_SERIES ControlCharacter::getSeries() const
79 {
80         if (!font_.get())
81                 return LyXFont::IGNORE_SERIES;
82         return font_->series();
83 }
84
85
86 void ControlCharacter::setSeries(LyXFont::FONT_SERIES val)
87 {
88         font_->setSeries(val);
89 }
90
91
92 LyXFont::FONT_SHAPE ControlCharacter::getShape() const
93 {
94         if (!font_.get())
95                 return LyXFont::IGNORE_SHAPE;
96         return font_->shape();
97 }
98
99
100 void ControlCharacter::setShape(LyXFont::FONT_SHAPE val)
101 {
102         font_->setShape(val);
103 }
104
105
106 LyXFont::FONT_SIZE ControlCharacter::getSize() const
107 {
108         if (!font_.get())
109                 return LyXFont::IGNORE_SIZE;
110         return font_->size();
111 }
112
113
114 void ControlCharacter::setSize(LyXFont::FONT_SIZE val)
115 {
116         font_->setSize(val);
117 }
118
119
120 frnt::FONT_STATE ControlCharacter::getBar() const
121 {
122         if (!font_.get())
123                 return frnt::IGNORE;
124
125         if (font_->emph() == LyXFont::TOGGLE)
126                 return frnt::EMPH_TOGGLE;
127
128         if (font_->underbar() == LyXFont::TOGGLE)
129                 return frnt::UNDERBAR_TOGGLE;
130
131         if (font_->noun() == LyXFont::TOGGLE)
132                 return frnt::NOUN_TOGGLE;
133
134         if (font_->emph() == LyXFont::IGNORE &&
135             font_->underbar() == LyXFont::IGNORE &&
136             font_->noun() == LyXFont::IGNORE)
137                 return frnt::IGNORE;
138
139         return frnt::INHERIT;
140 }
141
142
143 void ControlCharacter::setBar(frnt::FONT_STATE val)
144 {
145         switch (val) {
146         case frnt::IGNORE:
147                 font_->setEmph(LyXFont::IGNORE);
148                 font_->setUnderbar(LyXFont::IGNORE);
149                 font_->setNoun(LyXFont::IGNORE);
150                 break;
151
152         case frnt::EMPH_TOGGLE:
153                 font_->setEmph(LyXFont::TOGGLE);
154                 break;
155
156         case frnt::UNDERBAR_TOGGLE:
157                 font_->setUnderbar(LyXFont::TOGGLE);
158                 break;
159
160         case frnt::NOUN_TOGGLE:
161                 font_->setNoun(LyXFont::TOGGLE);
162                 break;
163
164         case frnt::INHERIT:
165                 font_->setEmph(LyXFont::INHERIT);
166                 font_->setUnderbar(LyXFont::INHERIT);
167                 font_->setNoun(LyXFont::INHERIT);
168                 break;
169         }
170 }
171
172
173 LColor::color ControlCharacter::getColor() const
174 {
175         if (!font_.get())
176                 return LColor::ignore;
177
178         return font_->color();
179 }
180
181
182 void ControlCharacter::setColor(LColor::color val)
183 {
184         switch (val) {
185         case LColor::ignore:
186         case LColor::none:
187         case LColor::black:
188         case LColor::white:
189         case LColor::red:
190         case LColor::green:
191         case LColor::blue:
192         case LColor::cyan:
193         case LColor::magenta:
194         case LColor::yellow:
195         case LColor::inherit:
196                 font_->setColor(val);
197                 break;
198         default:
199                 break;
200         }
201 }
202
203
204 string ControlCharacter::getLanguage() const
205 {
206         if (font_.get() && font_->language())
207                 return font_->language()->lang();
208         return "ignore";
209 }
210
211
212 void ControlCharacter::setLanguage(string const & val)
213 {
214         if (val == "ignore")
215                 font_->setLanguage(ignore_language);
216
217         else if (val == "reset")
218                 font_->setLanguage(kernel().buffer()->params.language);
219
220         else
221                 font_->setLanguage(languages.getLanguage(val));
222 }
223
224
225 bool ControlCharacter::getToggleAll() const
226 {
227         return toggleall_;
228 }
229
230
231 void ControlCharacter::setToggleAll(bool t)
232 {
233         toggleall_ = t;
234 }