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