X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fintl.C;h=371d44da9ba1fde56cee4df3f82b56e4354055e1;hb=f676dacf9c69d8c906653f54d00342c01de6facf;hp=6e4f662ae909e36ad20f8b055e5e1537e70b2833;hpb=3660343dc7da7cb40b93448949dca02a579505d5;p=lyx.git diff --git a/src/intl.C b/src/intl.C index 6e4f662ae9..371d44da9b 100644 --- a/src/intl.C +++ b/src/intl.C @@ -1,12 +1,12 @@ /* This file is part of - * ====================================================== + * ====================================================== * * LyX, The Document Processor * * Copyright 1995 Matthias Ettrich - * Copyright 1995-1999 The LyX Team. + * Copyright 1995-2000 The LyX Team. * - * ======================================================*/ + * ====================================================== */ /* * International support for LyX @@ -28,28 +28,43 @@ #include "lyxrc.h" #include "trans_mgr.h" #include "support/lstrings.h" +#include "language.h" +#include "frontends/Dialogs.h" // redrawGUI -extern LyXRC* lyxrc; +#ifdef SIGC_CXX_NAMESPACES +using SigC::slot; +#endif + +using std::endl; // a wrapper around the callback static member. -extern "C" void C_Intl_DispatchCallback(FL_OBJECT *ob,long code); +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; + keymapon = lyxrc.use_kbmap; chsetcode = 0; primarykeymap = false; curkeymap = 0; otherkeymap = 0; + r_ = Dialogs::redrawGUI.connect(slot(this, &Intl::redraw)); } - Intl::~Intl() { + r_.disconnect(); + delete trans; +} + + +void Intl::redraw() +{ + if (fd_form_keymap && fd_form_keymap->KeyMap->visible) + fl_redraw_form(fd_form_keymap->KeyMap); } @@ -71,23 +86,23 @@ int Intl::SetSecondary(string const & 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); } @@ -129,19 +144,14 @@ void Intl::ToggleKeyMap() void Intl::KeyMapPrim() { - int i; - string 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(Debug::KBMAP)) - lyxerr << "Table: " << tex_babel[i-1] << endl; + int const i = Language->get(); + string p; if (i == otherkeymap) p = fl_get_input(fd_form_keymap->OtherKeymap); else @@ -165,19 +175,14 @@ void Intl::KeyMapPrim() void Intl::KeyMapSec() { - int i; - string 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(Debug::KBMAP)) - lyxerr << "Table: " << tex_babel[i-1] << endl; + int const i = Language2->get(); + string p; if (i == otherkeymap) p = fl_get_input(fd_form_keymap->OtherKeymap2); else @@ -197,24 +202,17 @@ void Intl::KeyMapSec() } } - -void Intl::LCombo(int, void *v) -{ - Intl *itl = (Intl*) v; - itl->Keymap(23); - return; -} - - -void Intl::LCombo2(int, void *v) +void Intl::LCombo(int, void * v, Combox * combox) { - Intl *itl = (Intl*) v; - itl->Keymap(43); + Intl * itl = static_cast(v); + if (combox == itl->Language) + itl->Keymap(23); + else if (combox == itl->Language2) + 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); @@ -223,16 +221,18 @@ 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!= 0) itl->Keymap(code); } -extern "C" void C_Intl_DispatchCallback(FL_OBJECT *ob,long code) + +extern "C" void C_Intl_DispatchCallback(FL_OBJECT * ob, long code) { - Intl::DispatchCallback(ob,code); + Intl::DispatchCallback(ob, code); } + void Intl::InitKeyMapper(bool on) /* initialize key mapper */ { @@ -245,71 +245,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, - C_Intl_DispatchCallback,27); + C_Intl_DispatchCallback, 27); fl_set_object_callback(fd_form_keymap->Charset, - C_Intl_DispatchCallback,26); + C_Intl_DispatchCallback, 26); fl_set_object_callback(fd_form_keymap->Accept, - C_Intl_DispatchCallback,0); + C_Intl_DispatchCallback, 0); fl_set_object_callback(fd_form_keymap->KeyOnBtn, - C_Intl_DispatchCallback,23); + C_Intl_DispatchCallback, 23); fl_set_object_callback(fd_form_keymap->KeyOffBtn, - C_Intl_DispatchCallback,3); + C_Intl_DispatchCallback, 3); fl_set_object_callback(fd_form_keymap->KeyOnBtn2, - C_Intl_DispatchCallback,43); + C_Intl_DispatchCallback, 43); // Make sure pressing the close box does not kill LyX. (RvdK) 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())) { - Language->select(n+1); + 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 @@ -319,17 +322,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(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 */ @@ -338,22 +342,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 @@ -367,6 +371,7 @@ void Intl::MenuKeymap() { if (fd_form_keymap->KeyMap->visible) { fl_raise_form(fd_form_keymap->KeyMap); - } else fl_show_form(fd_form_keymap->KeyMap, FL_PLACE_MOUSE, - FL_FULLBORDER, _("Key Mappings")); + } else fl_show_form(fd_form_keymap->KeyMap, + FL_PLACE_MOUSE | FL_FREE_SIZE, FL_TRANSIENT, + _("Key Mappings")); }