1 /* This file is part of
2 * ======================================================
4 * LyX, The Document Processor
6 * Copyright (C) 1995 Matthias Ettrich
7 * Copyright (C) 1995-1998 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"
32 // $Id: intl.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $
34 #if !defined(lint) && !defined(WITH_WARNINGS)
35 static char vcid[] = "$Id: intl.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
43 : prim_lang(lyxrc->primary_kbmap),
44 sec_lang(lyxrc->secondary_kbmap),
45 trans(new TransManager)
47 keymapon = lyxrc->use_kbmap;
49 primarykeymap = false;
60 int Intl::SetPrimary(LString const & lang)
62 if (lyxerr.debugging(Error::KBMAP))
63 lyxerr.print("Primary: `" + lang + "'");
64 return trans->SetPrimary(lang);
68 int Intl::SetSecondary(LString const & lang)
70 if (lyxerr.debugging(Error::KBMAP))
71 lyxerr.print("Secondary: `" + lang + "'");
72 return trans->SetSecondary(lang);
92 fl_set_button(fd_form_keymap->KeyOffBtn,off);
93 fl_set_button(fd_form_keymap->KeyOnBtn,prim);
94 fl_set_button(fd_form_keymap->KeyOnBtn2,sec);
98 void Intl::KeyMapOn(bool on)
99 /* turn on/off key mappings, status in keymapon */
103 if (!fd_form_keymap) return;
105 fl_set_button(fd_form_keymap->KeyOffBtn, 0);
106 fl_set_button(fd_form_keymap->KeyOnBtn, 0);
107 fl_set_button(fd_form_keymap->KeyOnBtn2, 0);
116 fl_set_button(fd_form_keymap->KeyOffBtn, 1);
117 fl_hide_object(fd_form_keymap->KeymapErr);
118 trans->DisableKeymap();
123 void Intl::ToggleKeyMap()
125 if (keymapon && primarykeymap) {
127 } else if (keymapon) {
134 void Intl::KeyMapPrim()
139 fl_set_button(fd_form_keymap->KeyOffBtn, 0);
140 fl_set_button(fd_form_keymap->KeyOnBtn, 1);
141 fl_set_button(fd_form_keymap->KeyOnBtn2, 0);
143 /* read text from choice */
146 if (lyxerr.debugging(Error::KBMAP))
147 lyxerr.print(LString("Table: ") + tex_babel[i-1]);
149 if (i == otherkeymap)
150 p = fl_get_input(fd_form_keymap->OtherKeymap);
152 p = Language->getline();
156 if (p.empty() || trans->SetPrimary(p)) {
157 // error selecting keymap
158 fl_show_object(fd_form_keymap->KeymapErr);
162 trans->EnablePrimary();
164 primarykeymap = true;
165 fl_hide_object(fd_form_keymap->KeymapErr);
170 void Intl::KeyMapSec()
175 fl_set_button(fd_form_keymap->KeyOffBtn, 0);
176 fl_set_button(fd_form_keymap->KeyOnBtn, 0);
177 fl_set_button(fd_form_keymap->KeyOnBtn2, 1);
179 /* read text from choice */
180 i = Language2->get();
182 if (lyxerr.debugging(Error::KBMAP))
183 lyxerr.print(LString("Table: ") + tex_babel[i-1]);
185 if (i == otherkeymap)
186 p = fl_get_input(fd_form_keymap->OtherKeymap2);
188 p = Language2->getline();
191 if (p.empty() || trans->SetSecondary(p)) {
192 // error selecting keymap
193 fl_show_object(fd_form_keymap->KeymapErr);
197 trans->EnableSecondary();
199 primarykeymap = false;
200 fl_hide_object(fd_form_keymap->KeymapErr);
205 void Intl::LCombo(int, void *v)
207 Intl *itl = (Intl*) v;
213 void Intl::LCombo2(int, void *v)
215 Intl *itl = (Intl*) v;
221 void Intl::DispatchCallback(FL_OBJECT *ob,long code)
223 if (ob && (code == 0)) {
224 fl_hide_form(ob->form);
227 if (!ob || !(ob->u_vdata))
230 Intl *itl=(Intl *)ob->u_vdata;
232 if (itl!=NULL) itl->Keymap(code);
236 void Intl::InitKeyMapper(bool on)
237 /* initialize key mapper */
239 lyxerr.debug("Initializing key mappings...", Error::KBMAP);
241 if (prim_lang.empty() && sec_lang.empty())
246 Language = new Combox(FL_COMBOX_DROPLIST);
247 Language2 = new Combox(FL_COMBOX_DROPLIST);
248 Language->setcallback(LCombo,this);
249 Language2->setcallback(LCombo2,this);
251 fd_form_keymap = create_form_KeyMap();
253 // Add the Intl* pointer
254 fd_form_keymap->AcceptChset->u_vdata=
255 fd_form_keymap->Charset->u_vdata=
256 fd_form_keymap->Accept->u_vdata=
257 fd_form_keymap->OtherKeymap->u_vdata=
258 fd_form_keymap->KeyOnBtn->u_vdata=
259 fd_form_keymap->KeyOffBtn->u_vdata=
260 fd_form_keymap->KeyOnBtn2->u_vdata=(void *)this;
262 // add the callbacks.
263 fl_set_object_callback(fd_form_keymap->AcceptChset,DispatchCallback,27);
264 fl_set_object_callback(fd_form_keymap->Charset,DispatchCallback,26);
265 fl_set_object_callback(fd_form_keymap->Accept,DispatchCallback,0);
267 fl_set_object_callback(fd_form_keymap->KeyOnBtn,DispatchCallback,23);
268 fl_set_object_callback(fd_form_keymap->KeyOffBtn,DispatchCallback,3);
269 fl_set_object_callback(fd_form_keymap->KeyOnBtn2,DispatchCallback,43);
271 // Make sure pressing the close box does not kill LyX. (RvdK)
272 fl_set_form_atclose(fd_form_keymap->KeyMap, CancelCloseBoxCB, NULL);
274 fl_hide_object(fd_form_keymap->KeymapErr);
275 fl_hide_object(fd_form_keymap->ChsetErr);
276 fl_set_input(fd_form_keymap->Charset, lyxrc->font_norm.c_str());
278 // Adds two comboxes to the keyboard map
279 fl_addto_form(fd_form_keymap->KeyMap);
280 Language->add(120,30,160,30,300); // Primary
281 Language2->add(120,110,160,30,300); // Secondary
287 if (!strlen(tex_babel[n]))
290 Language->addto(tex_babel[n]);
291 Language2->addto(tex_babel[n]);
295 Language->addto(_("other..."));
296 Language2->addto(_("other..."));
298 if (!Language->select_text(prim_lang.c_str())) {
299 Language->select(n+1);
300 fl_set_input(fd_form_keymap->OtherKeymap, prim_lang.c_str());
303 trans->SetPrimary(prim_lang);
305 if (!Language2->select_text(sec_lang.c_str())) {
306 Language2->select(n+1);
307 fl_set_input(fd_form_keymap->OtherKeymap2, sec_lang.c_str());
310 trans->SetSecondary(sec_lang);
314 Keymap(23); // turn primary on
316 trans->setCharset(lyxrc->font_norm.c_str());
320 void Intl::Keymap(long code)
324 if (lyxerr.debugging(Error::KBMAP))
325 lyxerr.print(LString("KeyMap callback: ") + code);
330 fl_hide_form(fd_form_keymap->KeyMap);
339 code -= 19; // change to language change type code
341 case 4: // 4 and 24 will never be called directly, they will only be
342 case 24: // called through 3,23,43 (lgb)
349 case 27: /* set new font norm */
350 p = fl_get_input(fd_form_keymap->Charset);
351 if (trans->setCharset(p))
352 fl_show_object(fd_form_keymap->ChsetErr);
354 fl_hide_object(fd_form_keymap->ChsetErr);
360 void Intl::MenuKeymap()
362 if (fd_form_keymap->KeyMap->visible) {
363 fl_raise_form(fd_form_keymap->KeyMap);
364 } else fl_show_form(fd_form_keymap->KeyMap, FL_PLACE_MOUSE,
365 FL_FULLBORDER, _("Key Mappings"));