X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fintl.C;h=0f33480ee6a6db0af4ee3610db7a0c6b5181e405;hb=ebfcf1c0e72288b7131607af0330500c8739cead;hp=fc6266c558be06f567f88efe099d6bd9620fa659;hpb=27de1486ca34aaad446adb798d71a77d6f6304da;p=lyx.git diff --git a/src/intl.C b/src/intl.C index fc6266c558..0f33480ee6 100644 --- a/src/intl.C +++ b/src/intl.C @@ -1,12 +1,12 @@ /* This file is part of -* ====================================================== -* -* LyX, The Document Processor -* -* Copyright (C) 1995 Matthias Ettrich -* Copyright (C) 1995-1998 The LyX Team. -* -*======================================================*/ + * ====================================================== + * + * LyX, The Document Processor + * + * Copyright 1995 Matthias Ettrich + * Copyright 1995-2000 The LyX Team. + * + * ====================================================== */ /* * International support for LyX @@ -24,74 +24,71 @@ #include "tex-strings.h" #include "combox.h" #include "lyx_gui_misc.h" // CancelCloseBoxCB -#include "error.h" +#include "debug.h" #include "lyxrc.h" #include "trans_mgr.h" +#include "support/lstrings.h" +#include "language.h" +using std::endl; -// $Id: intl.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $ - -#if !defined(lint) && !defined(WITH_WARNINGS) -static char vcid[] = "$Id: intl.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $"; -#endif /* lint */ - -// lyx rc -extern LyXRC* lyxrc; +// a wrapper around the callback static member. +extern "C" void C_Intl_DispatchCallback(FL_OBJECT * ob, long code); Intl::Intl() - : prim_lang(lyxrc->primary_kbmap), - sec_lang(lyxrc->secondary_kbmap), - trans(new TransManager) + : prim_lang(lyxrc.primary_kbmap), + sec_lang(lyxrc.secondary_kbmap), + trans(new TransManager) { - keymapon = lyxrc->use_kbmap; - chsetcode = NULL; + keymapon = lyxrc.use_kbmap; + chsetcode = 0; primarykeymap = false; curkeymap = 0; otherkeymap = 0; } - Intl::~Intl() { + delete trans; } -int Intl::SetPrimary(LString const & lang) +int Intl::SetPrimary(string const & lang) { - if (lyxerr.debugging(Error::KBMAP)) - lyxerr.print("Primary: `" + lang + "'"); + if (lyxerr.debugging(Debug::KBMAP)) + lyxerr << "Primary: `" << lang << "'" << endl; return trans->SetPrimary(lang); } -int Intl::SetSecondary(LString const & lang) +int Intl::SetSecondary(string const & lang) { - if (lyxerr.debugging(Error::KBMAP)) - lyxerr.print("Secondary: `" + lang + "'"); + if (lyxerr.debugging(Debug::KBMAP)) + lyxerr << "Secondary: `" << lang << "'" << endl; return trans->SetSecondary(lang); } void Intl::update() { - int off,prim,sec; - - off=prim=sec=0; + int off = 0; + int prim = 0; + int sec = 0; if (!keymapon) { - off=1; + off = 1; } else { if (primarykeymap) { - prim=1; + prim = 1; } else { - sec=1; + sec = 1; } } - fl_set_button(fd_form_keymap->KeyOffBtn,off); - fl_set_button(fd_form_keymap->KeyOnBtn,prim); - fl_set_button(fd_form_keymap->KeyOnBtn2,sec); + fl_set_button(fd_form_keymap->KeyOffBtn, off); + fl_set_button(fd_form_keymap->KeyOnBtn, prim); + fl_set_button(fd_form_keymap->KeyOnBtn2, sec); } @@ -133,19 +130,14 @@ void Intl::ToggleKeyMap() void Intl::KeyMapPrim() { - int i; - LString p; - fl_set_button(fd_form_keymap->KeyOffBtn, 0); fl_set_button(fd_form_keymap->KeyOnBtn, 1); fl_set_button(fd_form_keymap->KeyOnBtn2, 0); /* read text from choice */ - i = Language->get(); - - if (lyxerr.debugging(Error::KBMAP)) - lyxerr.print(LString("Table: ") + tex_babel[i-1]); + int i = Language->get(); + string p; if (i == otherkeymap) p = fl_get_input(fd_form_keymap->OtherKeymap); else @@ -169,19 +161,14 @@ void Intl::KeyMapPrim() void Intl::KeyMapSec() { - int i; - LString p; - fl_set_button(fd_form_keymap->KeyOffBtn, 0); fl_set_button(fd_form_keymap->KeyOnBtn, 0); fl_set_button(fd_form_keymap->KeyOnBtn2, 1); /* read text from choice */ - i = Language2->get(); - - if (lyxerr.debugging(Error::KBMAP)) - lyxerr.print(LString("Table: ") + tex_babel[i-1]); + int i = Language2->get(); + string p; if (i == otherkeymap) p = fl_get_input(fd_form_keymap->OtherKeymap2); else @@ -201,24 +188,17 @@ void Intl::KeyMapSec() } } - -void Intl::LCombo(int, void *v) +void Intl::LCombo(int, void * v, Combox * combox) { - Intl *itl = (Intl*) v; - itl->Keymap(23); + Intl * itl = static_cast(v); + if (combox == itl->Language) + itl->Keymap(23); + else if (combox == itl->Language2) + itl->Keymap(43); return; } - -void Intl::LCombo2(int, void *v) -{ - Intl *itl = (Intl*) v; - itl->Keymap(43); - return; -} - - -void Intl::DispatchCallback(FL_OBJECT *ob,long code) +void Intl::DispatchCallback(FL_OBJECT * ob, long code) { if (ob && (code == 0)) { fl_hide_form(ob->form); @@ -227,16 +207,22 @@ void Intl::DispatchCallback(FL_OBJECT *ob,long code) if (!ob || !(ob->u_vdata)) return; - Intl *itl=(Intl *)ob->u_vdata; + Intl * itl = static_cast(ob->u_vdata); + + if (itl!= 0) itl->Keymap(code); +} + - if (itl!=NULL) itl->Keymap(code); +extern "C" void C_Intl_DispatchCallback(FL_OBJECT * ob, long code) +{ + Intl::DispatchCallback(ob, code); } void Intl::InitKeyMapper(bool on) /* initialize key mapper */ { - lyxerr.debug("Initializing key mappings...", Error::KBMAP); + lyxerr[Debug::INIT] << "Initializing key mappings..." << endl; if (prim_lang.empty() && sec_lang.empty()) keymapon = false; @@ -245,65 +231,74 @@ void Intl::InitKeyMapper(bool on) Language = new Combox(FL_COMBOX_DROPLIST); Language2 = new Combox(FL_COMBOX_DROPLIST); - Language->setcallback(LCombo,this); - Language2->setcallback(LCombo2,this); + Language->setcallback(LCombo, this); + Language2->setcallback(LCombo, this); fd_form_keymap = create_form_KeyMap(); // Add the Intl* pointer - fd_form_keymap->AcceptChset->u_vdata= - fd_form_keymap->Charset->u_vdata= - fd_form_keymap->Accept->u_vdata= - fd_form_keymap->OtherKeymap->u_vdata= - fd_form_keymap->KeyOnBtn->u_vdata= - fd_form_keymap->KeyOffBtn->u_vdata= - fd_form_keymap->KeyOnBtn2->u_vdata=(void *)this; + fd_form_keymap->AcceptChset->u_vdata = + fd_form_keymap->Charset->u_vdata = + fd_form_keymap->Accept->u_vdata = + fd_form_keymap->OtherKeymap->u_vdata = + fd_form_keymap->KeyOnBtn->u_vdata = + fd_form_keymap->KeyOffBtn->u_vdata = + fd_form_keymap->KeyOnBtn2->u_vdata = this; // add the callbacks. - fl_set_object_callback(fd_form_keymap->AcceptChset,DispatchCallback,27); - fl_set_object_callback(fd_form_keymap->Charset,DispatchCallback,26); - fl_set_object_callback(fd_form_keymap->Accept,DispatchCallback,0); - - fl_set_object_callback(fd_form_keymap->KeyOnBtn,DispatchCallback,23); - fl_set_object_callback(fd_form_keymap->KeyOffBtn,DispatchCallback,3); - fl_set_object_callback(fd_form_keymap->KeyOnBtn2,DispatchCallback,43); + fl_set_object_callback(fd_form_keymap->AcceptChset, + C_Intl_DispatchCallback, 27); + fl_set_object_callback(fd_form_keymap->Charset, + C_Intl_DispatchCallback, 26); + fl_set_object_callback(fd_form_keymap->Accept, + C_Intl_DispatchCallback, 0); + + fl_set_object_callback(fd_form_keymap->KeyOnBtn, + C_Intl_DispatchCallback, 23); + fl_set_object_callback(fd_form_keymap->KeyOffBtn, + C_Intl_DispatchCallback, 3); + fl_set_object_callback(fd_form_keymap->KeyOnBtn2, + C_Intl_DispatchCallback, 43); // Make sure pressing the close box does not kill LyX. (RvdK) - fl_set_form_atclose(fd_form_keymap->KeyMap, CancelCloseBoxCB, NULL); + fl_set_form_atclose(fd_form_keymap->KeyMap, CancelCloseBoxCB, 0); fl_hide_object(fd_form_keymap->KeymapErr); fl_hide_object(fd_form_keymap->ChsetErr); - fl_set_input(fd_form_keymap->Charset, lyxrc->font_norm.c_str()); + fl_set_input(fd_form_keymap->Charset, lyxrc.font_norm.c_str()); // Adds two comboxes to the keyboard map fl_addto_form(fd_form_keymap->KeyMap); - Language->add(120,30,160,30,300); // Primary - Language2->add(120,110,160,30,300); // Secondary + Language->add(120, 30, 160, 30, 300); // Primary + Language2->add(120, 110, 160, 30, 300); // Secondary fl_end_form(); - int n=0; + int n = 0; + // Default is not in the language map +#ifdef DO_USE_DEFAULT_LANGUAGE + Language->addto("default"); + Language2->addto("default"); + ++n; +#endif + for (Languages::const_iterator cit = languages.begin(); + cit != languages.end(); ++cit) { + Language->addto((*cit).second.lang()); + Language2->addto((*cit).second.lang()); + ++n; + } - while (true) - if (!strlen(tex_babel[n])) - break; - else { - Language->addto(tex_babel[n]); - Language2->addto(tex_babel[n]); - n++; - } - Language->addto(_("other...")); Language2->addto(_("other...")); - otherkeymap = n+1; - if (!Language->select_text(prim_lang.c_str())) { + otherkeymap = n + 1; + if (!Language->select_text(prim_lang)) { Language->select(n+1); fl_set_input(fd_form_keymap->OtherKeymap, prim_lang.c_str()); } else trans->SetPrimary(prim_lang); - if (!Language2->select_text(sec_lang.c_str())) { - Language2->select(n+1); + if (!Language2->select_text(sec_lang)) { + Language2->select(n + 1); fl_set_input(fd_form_keymap->OtherKeymap2, sec_lang.c_str()); } else @@ -313,17 +308,18 @@ void Intl::InitKeyMapper(bool on) if (keymapon) Keymap(23); // turn primary on - trans->setCharset(lyxrc->font_norm.c_str()); + trans->setCharset(lyxrc.font_norm); } void Intl::Keymap(long code) { - char const *p; - - if (lyxerr.debugging(Error::KBMAP)) - lyxerr.print(LString("KeyMap callback: ") + code); + if (lyxerr.debugging(Debug::KBMAP)) + lyxerr << "KeyMap callback: " << code << endl; + // Did you wonder if it is possible to write spagetti code with + // other constructs thatn goto's? Well here we have a nice small + // spagetti example using a switch... (Lgb) switch (code) { case 0: /* cancel/hide */ @@ -332,22 +328,22 @@ void Intl::Keymap(long code) case 3: case 23: case 43: - if (code==3) { + if (code == 3) { KeyMapOn(false); return; } code -= 19; // change to language change type code case 4: // 4 and 24 will never be called directly, they will only be - case 24: // called through 3,23,43 (lgb) - if (code==4) { + case 24: // called through 3, 23, 43 (lgb) + if (code == 4) { KeyMapPrim(); } else { KeyMapSec(); } break; case 27: /* set new font norm */ - p = fl_get_input(fd_form_keymap->Charset); + char const * p = fl_get_input(fd_form_keymap->Charset); if (trans->setCharset(p)) fl_show_object(fd_form_keymap->ChsetErr); else