]> git.lyx.org Git - lyx.git/blob - src/frontends/xforms/FormCharacter.C
be81b82b280c117e0834a1de5f76bdcb04565df1
[lyx.git] / src / frontends / xforms / FormCharacter.C
1 /**
2  * \file FormCharacter.C
3  * Copyright 2001 The LyX Team.
4  * See the file COPYING.
5  *
6  * \author Edwin Leuven, leuven@fee.uva.nl
7  */
8
9 #include <config.h>
10
11 #ifdef __GNUG_
12 #pragma implementation
13 #endif
14
15 #include FORMS_H_LOCATION
16
17 #include "FormCharacter.h"
18 #include "form_character.h"
19 #include "bufferview_funcs.h"
20 #include "Dialogs.h"
21 #include "Liason.h"
22 #include "LyXView.h"
23 #include "buffer.h"
24 #include "lyxtext.h"
25 #include "language.h"
26 #include "combox.h"
27
28 #ifdef CXX_WORKING_NAMESPACES
29 using Liason::setMinibuffer;
30 #endif
31
32
33 FormCharacter::FormCharacter(LyXView * lv, Dialogs * d)
34         : FormBaseBD(lv, d, _("Character Layout"),
35                      new NoRepeatedApplyReadOnlyPolicy),
36         dialog_(0), combo_language2(0)
37 {
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));
42    // for LFUN_FREE
43    d->setUserFreeFont.connect(slot(this, &FormCharacter::apply));
44 }
45
46
47 FormCharacter::~FormCharacter()
48 {
49    delete dialog_;
50    delete combo_language2;
51    
52 }
53
54
55 FL_FORM * FormCharacter::form() const
56 {
57    if (dialog_) 
58      return dialog_->form;
59    return 0;
60 }
61
62 void FormCharacter::build()
63 {
64    dialog_ = build_character();
65    // Workaround dumb xforms sizing bug
66    minw_ = form()->w;
67    minh_ = form()->h;
68    // Manage the ok, apply and cancel/close buttons
69    bc_.setApply(dialog_->button_apply);
70    bc_.setCancel(dialog_->button_close);
71    bc_.refresh();
72    bc_.addReadOnly (dialog_->check_toggle_all);
73    
74    fl_addto_choice(dialog_->choice_family,
75                    _(" No change %l| Roman | Sans Serif | Typewriter %l| Reset "));
76    fl_addto_choice(dialog_->choice_series,
77                    _(" No change %l| Medium | Bold %l| Reset "));
78    fl_addto_choice(dialog_->choice_shape,
79                    _(" No change %l| Upright | Italic | Slanted | Small Caps "
80                      "%l| Reset "));
81    fl_addto_choice(dialog_->choice_size,
82                    _(" No change %l| Tiny | Smallest | Smaller | Small "
83                      "| Normal | Large | Larger | Largest | Huge | Huger "
84                      "%l| Increase | Decrease | Reset "));
85    fl_addto_choice(dialog_->choice_bar,
86                    _(" No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "));
87    fl_addto_choice(dialog_->choice_color,
88                    _(" No change %l| No color | Black | White | Red | Green "
89                      "| Blue | Cyan | Magenta | Yellow %l| Reset "));
90    fl_addto_choice(dialog_->choice_language,
91                    _(" English %l| German | French "));
92
93    // insert default language box manually
94    fl_addto_form(dialog_->form);
95    FL_OBJECT * ob = dialog_->choice_language;
96    combo_language2 = new Combox(FL_COMBOX_DROPLIST);
97    combo_language2->add(ob->x, ob->y, ob->w, ob->h, 250);
98    combo_language2->shortcut("#L", 1);
99    fl_end_form();
100
101    // build up the combox entries
102    combo_language2->addline(_("No change"));
103    combo_language2->addline(_("Reset"));
104    for (Languages::const_iterator cit = languages.begin(); 
105         cit != languages.end(); ++cit) {
106         combo_language2->addto((*cit).second.lang());
107    }
108
109    
110 }
111
112
113 void FormCharacter::apply()
114 {
115    if (!lv_->view()->available() || !dialog_)
116      return;
117    
118    LyXFont font(LyXFont::ALL_IGNORE);
119    
120    int pos = fl_get_choice(dialog_->choice_family);
121    switch (pos) {
122       case 1: font.setFamily(LyXFont::IGNORE_FAMILY); break;
123       case 2: font.setFamily(LyXFont::ROMAN_FAMILY); break;
124       case 3: font.setFamily(LyXFont::SANS_FAMILY); break;
125       case 4: font.setFamily(LyXFont::TYPEWRITER_FAMILY); break;
126       case 5: font.setFamily(LyXFont::INHERIT_FAMILY); break;
127    }
128    
129    pos = fl_get_choice(dialog_->choice_series);
130    switch (pos) {
131       case 1: font.setSeries(LyXFont::IGNORE_SERIES); break;
132       case 2: font.setSeries(LyXFont::MEDIUM_SERIES); break;
133       case 3: font.setSeries(LyXFont::BOLD_SERIES); break;
134       case 4: font.setSeries(LyXFont::INHERIT_SERIES); break;
135    }
136    
137    pos = fl_get_choice(dialog_->choice_shape);
138    switch (pos) {
139       case 1: font.setShape(LyXFont::IGNORE_SHAPE); break;
140       case 2: font.setShape(LyXFont::UP_SHAPE); break;
141       case 3: font.setShape(LyXFont::ITALIC_SHAPE); break;
142       case 4: font.setShape(LyXFont::SLANTED_SHAPE); break;
143       case 5: font.setShape(LyXFont::SMALLCAPS_SHAPE); break;
144       case 6: font.setShape(LyXFont::INHERIT_SHAPE); break;
145    }
146    
147    pos = fl_get_choice(dialog_->choice_size);
148    switch (pos) {
149       case 1: font.setSize(LyXFont::IGNORE_SIZE); break;
150       case 2: font.setSize(LyXFont::SIZE_TINY); break;
151       case 3: font.setSize(LyXFont::SIZE_SCRIPT); break;
152       case 4: font.setSize(LyXFont::SIZE_FOOTNOTE); break;
153       case 5: font.setSize(LyXFont::SIZE_SMALL); break;
154       case 6: font.setSize(LyXFont::SIZE_NORMAL); break;
155       case 7: font.setSize(LyXFont::SIZE_LARGE); break;
156       case 8: font.setSize(LyXFont::SIZE_LARGER); break;
157       case 9: font.setSize(LyXFont::SIZE_LARGEST); break;
158       case 10: font.setSize(LyXFont::SIZE_HUGE); break;
159       case 11: font.setSize(LyXFont::SIZE_HUGER); break;
160       case 12: font.setSize(LyXFont::INCREASE_SIZE); break;
161       case 13: font.setSize(LyXFont::DECREASE_SIZE); break;
162       case 14: font.setSize(LyXFont::INHERIT_SIZE); break;
163    }
164    
165    pos = fl_get_choice(dialog_->choice_bar);
166    switch (pos) {
167       case 1: font.setEmph(LyXFont::IGNORE);
168       font.setUnderbar(LyXFont::IGNORE);
169       font.setNoun(LyXFont::IGNORE);
170       font.setLatex(LyXFont::IGNORE);
171       break;
172       case 2: font.setEmph(LyXFont::TOGGLE); break;
173       case 3: font.setUnderbar(LyXFont::TOGGLE); break;
174       case 4: font.setNoun(LyXFont::TOGGLE); break;
175       case 5: font.setLatex(LyXFont::TOGGLE); break;
176       case 6: font.setEmph(LyXFont::INHERIT);
177       font.setUnderbar(LyXFont::INHERIT);
178       font.setNoun(LyXFont::INHERIT);
179       font.setLatex(LyXFont::INHERIT);
180       break;
181    }
182    
183    pos = fl_get_choice(dialog_->choice_color);
184    switch (pos) {
185       case 1: font.setColor(LColor::ignore); break;
186       case 2: font.setColor(LColor::none); break;
187       case 3: font.setColor(LColor::black); break;
188       case 4: font.setColor(LColor::white); break;
189       case 5: font.setColor(LColor::red); break;
190       case 6: font.setColor(LColor::green); break;
191       case 7: font.setColor(LColor::blue); break;
192       case 8: font.setColor(LColor::cyan); break;
193       case 9: font.setColor(LColor::magenta); break;
194       case 10: font.setColor(LColor::yellow); break;
195       case 11: font.setColor(LColor::inherit); break;
196    }
197    
198    int const choice = combo_language2->get();
199    if (choice == 1)
200      font.setLanguage(ignore_language);
201    else if (choice == 2)
202      font.setLanguage(lv_->buffer()->params.language);
203    else
204      font.setLanguage(languages.getLanguage(combo_language2->getline()));
205
206    
207    bool toggleall = fl_get_button(dialog_->check_toggle_all);
208    ToggleAndShow(lv_->view(), font, toggleall);
209    lv_->view()->setState();
210    lv_->buffer()->markDirty();
211    setMinibuffer(lv_, _("Character set"));
212 }
213
214
215 void FormCharacter::update()
216 {
217     if (!dialog_)
218         return;
219    
220     bc_.readOnly(lv_->buffer()->isReadonly());
221 }
222
223