2 * \file FormCharacter.C
3 * Copyright 2001 The LyX Team.
4 * See the file COPYING.
6 * \author Edwin Leuven, leuven@fee.uva.nl
12 #pragma implementation
15 #include FORMS_H_LOCATION
17 #include "FormCharacter.h"
18 #include "form_character.h"
19 #include "bufferview_funcs.h"
28 #ifdef CXX_WORKING_NAMESPACES
29 using Liason::setMinibuffer;
33 FormCharacter::FormCharacter(LyXView * lv, Dialogs * d)
34 : FormBaseBD(lv, d, _("Character Layout"),
35 new NoRepeatedApplyReadOnlyPolicy),
36 dialog_(0), combo_language2_(0)
38 // let the popup be shown
39 // This is a permanent connection so we won't bother
40 // storing a copy because we won't be disconnecting.
41 d->showLayoutCharacter.connect(slot(this, &FormCharacter::show));
43 d->setUserFreeFont.connect(slot(this, &FormCharacter::apply));
47 FormCharacter::~FormCharacter()
49 // This must be done before the deletion of the dialog.
50 delete combo_language2_;
55 FL_FORM * FormCharacter::form() const
63 void FormCharacter::build()
65 dialog_ = build_character();
66 // Workaround dumb xforms sizing bug
69 // Manage the ok, apply and cancel/close buttons
70 bc_.setApply(dialog_->button_apply);
71 bc_.setCancel(dialog_->button_close);
73 bc_.addReadOnly (dialog_->check_toggle_all);
75 fl_addto_choice(dialog_->choice_family,
76 _(" No change %l| Roman | Sans Serif | Typewriter %l| Reset "));
77 fl_addto_choice(dialog_->choice_series,
78 _(" No change %l| Medium | Bold %l| Reset "));
79 fl_addto_choice(dialog_->choice_shape,
80 _(" No change %l| Upright | Italic | Slanted | Small Caps "
82 fl_addto_choice(dialog_->choice_size,
83 _(" No change %l| Tiny | Smallest | Smaller | Small "
84 "| Normal | Large | Larger | Largest | Huge | Huger "
85 "%l| Increase | Decrease | Reset "));
86 fl_addto_choice(dialog_->choice_bar,
87 _(" No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "));
88 fl_addto_choice(dialog_->choice_color,
89 _(" No change %l| No color | Black | White | Red | Green "
90 "| Blue | Cyan | Magenta | Yellow %l| Reset "));
91 fl_addto_choice(dialog_->choice_language,
92 _(" English %l| German | French "));
94 // insert default language box manually
95 fl_addto_form(dialog_->form);
96 FL_OBJECT * ob = dialog_->choice_language;
97 combo_language2_ = new Combox(FL_COMBOX_DROPLIST);
98 combo_language2_->add(ob->x, ob->y, ob->w, ob->h, 250);
99 combo_language2_->shortcut("#L", 1);
102 // build up the combox entries
103 combo_language2_->addline(_("No change"));
104 combo_language2_->addline(_("Reset"));
105 for (Languages::const_iterator cit = languages.begin();
106 cit != languages.end(); ++cit) {
107 combo_language2_->addto((*cit).second.lang());
112 void FormCharacter::apply()
114 if (!lv_->view()->available() || !dialog_)
117 LyXFont font(LyXFont::ALL_IGNORE);
119 int pos = fl_get_choice(dialog_->choice_family);
121 case 1: font.setFamily(LyXFont::IGNORE_FAMILY); break;
122 case 2: font.setFamily(LyXFont::ROMAN_FAMILY); break;
123 case 3: font.setFamily(LyXFont::SANS_FAMILY); break;
124 case 4: font.setFamily(LyXFont::TYPEWRITER_FAMILY); break;
125 case 5: font.setFamily(LyXFont::INHERIT_FAMILY); break;
128 pos = fl_get_choice(dialog_->choice_series);
130 case 1: font.setSeries(LyXFont::IGNORE_SERIES); break;
131 case 2: font.setSeries(LyXFont::MEDIUM_SERIES); break;
132 case 3: font.setSeries(LyXFont::BOLD_SERIES); break;
133 case 4: font.setSeries(LyXFont::INHERIT_SERIES); break;
136 pos = fl_get_choice(dialog_->choice_shape);
138 case 1: font.setShape(LyXFont::IGNORE_SHAPE); break;
139 case 2: font.setShape(LyXFont::UP_SHAPE); break;
140 case 3: font.setShape(LyXFont::ITALIC_SHAPE); break;
141 case 4: font.setShape(LyXFont::SLANTED_SHAPE); break;
142 case 5: font.setShape(LyXFont::SMALLCAPS_SHAPE); break;
143 case 6: font.setShape(LyXFont::INHERIT_SHAPE); break;
146 pos = fl_get_choice(dialog_->choice_size);
148 case 1: font.setSize(LyXFont::IGNORE_SIZE); break;
149 case 2: font.setSize(LyXFont::SIZE_TINY); break;
150 case 3: font.setSize(LyXFont::SIZE_SCRIPT); break;
151 case 4: font.setSize(LyXFont::SIZE_FOOTNOTE); break;
152 case 5: font.setSize(LyXFont::SIZE_SMALL); break;
153 case 6: font.setSize(LyXFont::SIZE_NORMAL); break;
154 case 7: font.setSize(LyXFont::SIZE_LARGE); break;
155 case 8: font.setSize(LyXFont::SIZE_LARGER); break;
156 case 9: font.setSize(LyXFont::SIZE_LARGEST); break;
157 case 10: font.setSize(LyXFont::SIZE_HUGE); break;
158 case 11: font.setSize(LyXFont::SIZE_HUGER); break;
159 case 12: font.setSize(LyXFont::INCREASE_SIZE); break;
160 case 13: font.setSize(LyXFont::DECREASE_SIZE); break;
161 case 14: font.setSize(LyXFont::INHERIT_SIZE); break;
164 pos = fl_get_choice(dialog_->choice_bar);
166 case 1: font.setEmph(LyXFont::IGNORE);
167 font.setUnderbar(LyXFont::IGNORE);
168 font.setNoun(LyXFont::IGNORE);
169 font.setLatex(LyXFont::IGNORE);
171 case 2: font.setEmph(LyXFont::TOGGLE); break;
172 case 3: font.setUnderbar(LyXFont::TOGGLE); break;
173 case 4: font.setNoun(LyXFont::TOGGLE); break;
174 case 5: font.setLatex(LyXFont::TOGGLE); break;
175 case 6: font.setEmph(LyXFont::INHERIT);
176 font.setUnderbar(LyXFont::INHERIT);
177 font.setNoun(LyXFont::INHERIT);
178 font.setLatex(LyXFont::INHERIT);
182 pos = fl_get_choice(dialog_->choice_color);
184 case 1: font.setColor(LColor::ignore); break;
185 case 2: font.setColor(LColor::none); break;
186 case 3: font.setColor(LColor::black); break;
187 case 4: font.setColor(LColor::white); break;
188 case 5: font.setColor(LColor::red); break;
189 case 6: font.setColor(LColor::green); break;
190 case 7: font.setColor(LColor::blue); break;
191 case 8: font.setColor(LColor::cyan); break;
192 case 9: font.setColor(LColor::magenta); break;
193 case 10: font.setColor(LColor::yellow); break;
194 case 11: font.setColor(LColor::inherit); break;
197 int const choice = combo_language2_->get();
199 font.setLanguage(ignore_language);
200 else if (choice == 2)
201 font.setLanguage(lv_->buffer()->params.language);
203 font.setLanguage(languages.getLanguage(combo_language2_->getline()));
206 bool toggleall = fl_get_button(dialog_->check_toggle_all);
207 ToggleAndShow(lv_->view(), font, toggleall);
208 lv_->view()->setState();
209 lv_->buffer()->markDirty();
210 setMinibuffer(lv_, _("Character set"));
214 void FormCharacter::update()
219 bc_.readOnly(lv_->buffer()->isReadonly());