1 /* This file is part of
2 * ======================================================
4 * LyX, The Document Processor
6 * Copyright 1995 Matthias Ettrich
7 * Copyright 1995-1999 The LyX Team.
9 * ======================================================*/
12 * International support for LyX
18 #pragma implementation
21 #include FORMS_H_LOCATION
24 #include "tex-strings.h"
26 #include "lyx_gui_misc.h" // CancelCloseBoxCB
29 #include "trans_mgr.h"
30 #include "support/lstrings.h"
36 : prim_lang(lyxrc->primary_kbmap),
37 sec_lang(lyxrc->secondary_kbmap),
38 trans(new TransManager)
40 keymapon = lyxrc->use_kbmap;
42 primarykeymap = false;
53 int Intl::SetPrimary(string const & lang)
55 if (lyxerr.debugging(Debug::KBMAP))
56 lyxerr << "Primary: `" << lang << "'" << endl;
57 return trans->SetPrimary(lang);
61 int Intl::SetSecondary(string const & lang)
63 if (lyxerr.debugging(Debug::KBMAP))
64 lyxerr << "Secondary: `" << lang << "'" << endl;
65 return trans->SetSecondary(lang);
85 fl_set_button(fd_form_keymap->KeyOffBtn,off);
86 fl_set_button(fd_form_keymap->KeyOnBtn,prim);
87 fl_set_button(fd_form_keymap->KeyOnBtn2,sec);
91 void Intl::KeyMapOn(bool on)
92 /* turn on/off key mappings, status in keymapon */
96 if (!fd_form_keymap) return;
98 fl_set_button(fd_form_keymap->KeyOffBtn, 0);
99 fl_set_button(fd_form_keymap->KeyOnBtn, 0);
100 fl_set_button(fd_form_keymap->KeyOnBtn2, 0);
109 fl_set_button(fd_form_keymap->KeyOffBtn, 1);
110 fl_hide_object(fd_form_keymap->KeymapErr);
111 trans->DisableKeymap();
116 void Intl::ToggleKeyMap()
118 if (keymapon && primarykeymap) {
120 } else if (keymapon) {
127 void Intl::KeyMapPrim()
132 fl_set_button(fd_form_keymap->KeyOffBtn, 0);
133 fl_set_button(fd_form_keymap->KeyOnBtn, 1);
134 fl_set_button(fd_form_keymap->KeyOnBtn2, 0);
136 /* read text from choice */
139 if (lyxerr.debugging(Debug::KBMAP))
140 lyxerr << "Table: " << tex_babel[i-1] << endl;
142 if (i == otherkeymap)
143 p = fl_get_input(fd_form_keymap->OtherKeymap);
145 p = Language->getline();
149 if (p.empty() || trans->SetPrimary(p)) {
150 // error selecting keymap
151 fl_show_object(fd_form_keymap->KeymapErr);
155 trans->EnablePrimary();
157 primarykeymap = true;
158 fl_hide_object(fd_form_keymap->KeymapErr);
163 void Intl::KeyMapSec()
168 fl_set_button(fd_form_keymap->KeyOffBtn, 0);
169 fl_set_button(fd_form_keymap->KeyOnBtn, 0);
170 fl_set_button(fd_form_keymap->KeyOnBtn2, 1);
172 /* read text from choice */
173 i = Language2->get();
175 if (lyxerr.debugging(Debug::KBMAP))
176 lyxerr << "Table: " << tex_babel[i-1] << endl;
178 if (i == otherkeymap)
179 p = fl_get_input(fd_form_keymap->OtherKeymap2);
181 p = Language2->getline();
184 if (p.empty() || trans->SetSecondary(p)) {
185 // error selecting keymap
186 fl_show_object(fd_form_keymap->KeymapErr);
190 trans->EnableSecondary();
192 primarykeymap = false;
193 fl_hide_object(fd_form_keymap->KeymapErr);
198 void Intl::LCombo(int, void *v)
200 Intl *itl = (Intl*) v;
206 void Intl::LCombo2(int, void *v)
208 Intl *itl = (Intl*) v;
214 void Intl::DispatchCallback(FL_OBJECT *ob,long code)
216 if (ob && (code == 0)) {
217 fl_hide_form(ob->form);
220 if (!ob || !(ob->u_vdata))
223 Intl *itl=(Intl *)ob->u_vdata;
225 if (itl!=0) itl->Keymap(code);
229 void Intl::InitKeyMapper(bool on)
230 /* initialize key mapper */
232 lyxerr[Debug::KBMAP] << "Initializing key mappings..." << endl;
234 if (prim_lang.empty() && sec_lang.empty())
239 Language = new Combox(FL_COMBOX_DROPLIST);
240 Language2 = new Combox(FL_COMBOX_DROPLIST);
241 Language->setcallback(LCombo,this);
242 Language2->setcallback(LCombo2,this);
244 fd_form_keymap = create_form_KeyMap();
246 // Add the Intl* pointer
247 fd_form_keymap->AcceptChset->u_vdata=
248 fd_form_keymap->Charset->u_vdata=
249 fd_form_keymap->Accept->u_vdata=
250 fd_form_keymap->OtherKeymap->u_vdata=
251 fd_form_keymap->KeyOnBtn->u_vdata=
252 fd_form_keymap->KeyOffBtn->u_vdata=
253 fd_form_keymap->KeyOnBtn2->u_vdata=(void *)this;
255 // add the callbacks.
256 fl_set_object_callback(fd_form_keymap->AcceptChset,DispatchCallback,27);
257 fl_set_object_callback(fd_form_keymap->Charset,DispatchCallback,26);
258 fl_set_object_callback(fd_form_keymap->Accept,DispatchCallback,0);
260 fl_set_object_callback(fd_form_keymap->KeyOnBtn,DispatchCallback,23);
261 fl_set_object_callback(fd_form_keymap->KeyOffBtn,DispatchCallback,3);
262 fl_set_object_callback(fd_form_keymap->KeyOnBtn2,DispatchCallback,43);
264 // Make sure pressing the close box does not kill LyX. (RvdK)
265 fl_set_form_atclose(fd_form_keymap->KeyMap, CancelCloseBoxCB, 0);
267 fl_hide_object(fd_form_keymap->KeymapErr);
268 fl_hide_object(fd_form_keymap->ChsetErr);
269 fl_set_input(fd_form_keymap->Charset, lyxrc->font_norm.c_str());
271 // Adds two comboxes to the keyboard map
272 fl_addto_form(fd_form_keymap->KeyMap);
273 Language->add(120,30,160,30,300); // Primary
274 Language2->add(120,110,160,30,300); // Secondary
280 if (!strlen(tex_babel[n]))
283 Language->addto(tex_babel[n]);
284 Language2->addto(tex_babel[n]);
288 Language->addto(_("other..."));
289 Language2->addto(_("other..."));
291 if (!Language->select_text(prim_lang.c_str())) {
292 Language->select(n+1);
293 fl_set_input(fd_form_keymap->OtherKeymap, prim_lang.c_str());
296 trans->SetPrimary(prim_lang);
298 if (!Language2->select_text(sec_lang.c_str())) {
299 Language2->select(n+1);
300 fl_set_input(fd_form_keymap->OtherKeymap2, sec_lang.c_str());
303 trans->SetSecondary(sec_lang);
307 Keymap(23); // turn primary on
309 trans->setCharset(lyxrc->font_norm.c_str());
313 void Intl::Keymap(long code)
317 if (lyxerr.debugging(Debug::KBMAP))
318 lyxerr << "KeyMap callback: " << code << endl;
323 fl_hide_form(fd_form_keymap->KeyMap);
332 code -= 19; // change to language change type code
334 case 4: // 4 and 24 will never be called directly, they will only be
335 case 24: // called through 3,23,43 (lgb)
342 case 27: /* set new font norm */
343 p = fl_get_input(fd_form_keymap->Charset);
344 if (trans->setCharset(p))
345 fl_show_object(fd_form_keymap->ChsetErr);
347 fl_hide_object(fd_form_keymap->ChsetErr);
353 void Intl::MenuKeymap()
355 if (fd_form_keymap->KeyMap->visible) {
356 fl_raise_form(fd_form_keymap->KeyMap);
357 } else fl_show_form(fd_form_keymap->KeyMap, FL_PLACE_MOUSE,
358 FL_FULLBORDER, _("Key Mappings"));