X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fxforms%2FFormPreferences.C;h=f8c5ac63b7616df2307c17ee9b930f3c7c8e364e;hb=4c6e0fe4226ce3b55d13726977f1e579f17c2ad1;hp=8d29e5e33bfbeea27cd23609dd24c06c90fea808;hpb=9068fa3b33c976c7105dca5bee02cba1a391cb88;p=lyx.git diff --git a/src/frontends/xforms/FormPreferences.C b/src/frontends/xforms/FormPreferences.C index 8d29e5e33b..f8c5ac63b7 100644 --- a/src/frontends/xforms/FormPreferences.C +++ b/src/frontends/xforms/FormPreferences.C @@ -5,64 +5,48 @@ * * \author Angus Leeming * - * Full author contact details are available in file CREDITS + * Full author contact details are available in file CREDITS. */ #include -#ifdef __GNUG__ -#pragma implementation -#endif - -#include "ControlPrefs.h" #include "FormPreferences.h" +#include "ControlPrefs.h" #include "forms/form_preferences.h" -#include "xformsBC.h" -#include "combox.h" -#include "Color.h" -#include "input_validators.h" +#include "FormColorpicker.h" #include "forms_gettext.h" -#include "xforms_helpers.h" -#include "helper_funcs.h" // getSecond +#include "input_validators.h" +#include "xformsBC.h" + +#include "controllers/helper_funcs.h" // getSecond #include "buffer.h" #include "converter.h" -#include "debug.h" -#include "language.h" +#include "format.h" #include "frnt_lang.h" -#include "lyxlex.h" -#include "lyxrc.h" -#include "LColor.h" -#include "Lsstream.h" -#include "funcrequest.h" - -#include "support/lyxfunctional.h" -#include "support/lyxmanip.h" -#include "support/filetools.h" -#include "support/LAssert.h" -#include "graphics/GraphicsCache.h" -#include "graphics/GraphicsTypes.h" +#include "support/LAssert.h" +#include "support/lstrings.h" +#include "support/tostr.h" +#include "support/path_defines.h" +#include "support/filetools.h" -#include +#include "lyx_forms.h" +#include "combox.h" -#include FORMS_H_LOCATION -#include #include -#include using std::endl; -using std::pair; using std::make_pair; using std::max; using std::min; + +using std::pair; using std::vector; -using std::setw; -using std::setfill; -extern string system_lyxdir; -extern string user_lyxdir; +using namespace lyx::support; + namespace { @@ -88,17 +72,26 @@ pair parseFontName(string const & name) } + +#if FL_VERSION == 0 || (FL_REVISION == 0 && FL_FIXLEVEL < 2) +bool const scalableTabfolders = false; +#else +bool const scalableTabfolders = true; +#endif + } // namespace anon typedef FormCB > base_class; + FormPreferences::FormPreferences() - : base_class(_("Preferences"), false), + : base_class(_("Preferences"), scalableTabfolders), colors_(*this), converters_(*this), inputs_misc_(*this), formats_(*this), interface_(*this), language_(*this), - lnf_misc_(*this), outputs_misc_(*this), paths_(*this), - printer_(*this), screen_fonts_(*this), spelloptions_(*this) + lnf_misc_(*this), identity_(*this), outputs_misc_(*this), + paths_(*this), printer_(*this), screen_fonts_(*this), + spelloptions_(*this) { } @@ -151,10 +144,10 @@ void FormPreferences::build() dialog_.reset(build_preferences(this)); // Manage the restore, save, apply and cancel/close buttons - bc().setOK(dialog_->button_ok); - bc().setApply(dialog_->button_apply); - bc().setCancel(dialog_->button_close); - bc().setRestore(dialog_->button_restore); + bcview().setOK(dialog_->button_ok); + bcview().setApply(dialog_->button_apply); + bcview().setCancel(dialog_->button_close); + bcview().setRestore(dialog_->button_restore); // Allow the base class to control messages setMessageWidget(dialog_->text_warning); @@ -175,83 +168,102 @@ void FormPreferences::build() interface_.build(); language_.build(); lnf_misc_.build(); + identity_.build(); outputs_misc_.build(); paths_.build(); printer_.build(); screen_fonts_.build(); spelloptions_.build(); + // Enable the tabfolders to be rescaled correctly. + if (scalableTabfolders) { + FL_OBJECT * folder = dialog_->tabfolder_prefs; + fl_set_tabfolder_autofit(folder, FL_FIT); + + folder = look_n_feel_tab_->tabfolder_inner; + fl_set_tabfolder_autofit(folder, FL_FIT); + + folder = converters_tab_->tabfolder_inner; + fl_set_tabfolder_autofit(folder, FL_FIT); + + folder = inputs_tab_->tabfolder_inner; + fl_set_tabfolder_autofit(folder, FL_FIT); + + folder = outputs_tab_->tabfolder_inner; + fl_set_tabfolder_autofit(folder, FL_FIT); + + folder = lang_opts_tab_->tabfolder_inner; + fl_set_tabfolder_autofit(folder, FL_FIT); + } + + // Stack tabs // Now add them to the tabfolder fl_addto_tabfolder(dialog_->tabfolder_prefs, - _("Look & Feel"), + _("Look & Feel").c_str(), look_n_feel_tab_->form); fl_addto_tabfolder(dialog_->tabfolder_prefs, - _("Lang Opts"), + _("Lang Opts").c_str(), lang_opts_tab_->form); fl_addto_tabfolder(dialog_->tabfolder_prefs, - _("Conversion"), + _("Conversion").c_str(), converters_tab_->form); fl_addto_tabfolder(dialog_->tabfolder_prefs, - _("Inputs"), + _("Inputs").c_str(), inputs_tab_->form); fl_addto_tabfolder(dialog_->tabfolder_prefs, - _("Outputs"), + _("Outputs").c_str(), outputs_tab_->form); // now build the nested tabfolders // Starting with look and feel fl_addto_tabfolder(look_n_feel_tab_->tabfolder_inner, - _("Screen Fonts"), + _("Screen Fonts").c_str(), screen_fonts_.dialog()->form); fl_addto_tabfolder(look_n_feel_tab_->tabfolder_inner, - _("Interface"), + _("Interface").c_str(), interface_.dialog()->form); fl_addto_tabfolder(look_n_feel_tab_->tabfolder_inner, - _("Colors"), + _("Colors").c_str(), colors_.dialog()->form); fl_addto_tabfolder(look_n_feel_tab_->tabfolder_inner, - _("Misc"), + _("Misc").c_str(), lnf_misc_.dialog()->form); + fl_addto_tabfolder(look_n_feel_tab_->tabfolder_inner, + _("Identity").c_str(), + identity_.dialog()->form); // then build converters fl_addto_tabfolder(converters_tab_->tabfolder_inner, - _("Formats"), + _("Formats").c_str(), formats_.dialog()->form); fl_addto_tabfolder(converters_tab_->tabfolder_inner, - _("Converters"), + _("Converters").c_str(), converters_.dialog()->form); // then build inputs // Paths should probably go in a few inner_tab called Files fl_addto_tabfolder(inputs_tab_->tabfolder_inner, - _("Paths"), + _("Paths").c_str(), paths_.dialog()->form); fl_addto_tabfolder(inputs_tab_->tabfolder_inner, - _("Misc"), + _("Misc").c_str(), inputs_misc_.dialog()->form); // then building outputs fl_addto_tabfolder(outputs_tab_->tabfolder_inner, - _("Printer"), + _("Printer").c_str(), printer_.dialog()->form); fl_addto_tabfolder(outputs_tab_->tabfolder_inner, - _("Misc"), + _("Misc").c_str(), outputs_misc_.dialog()->form); // then building usage fl_addto_tabfolder(lang_opts_tab_->tabfolder_inner, - _("Spell checker"), + _("Spell checker").c_str(), spelloptions_.dialog()->form); fl_addto_tabfolder(lang_opts_tab_->tabfolder_inner, - _("Language"), + _("Language").c_str(), language_.dialog()->form); - - // work-around xforms bug re update of folder->x, folder->y coords. - setPrehandler(look_n_feel_tab_->tabfolder_inner); - setPrehandler(converters_tab_->tabfolder_inner); - setPrehandler(inputs_tab_->tabfolder_inner); - setPrehandler(outputs_tab_->tabfolder_inner); - setPrehandler(lang_opts_tab_->tabfolder_inner); } @@ -268,8 +280,6 @@ void FormPreferences::apply() // and other stuff which may cost us a lot on slower/high-load // machines. - lyxerr << "apply in form !" << endl; - LyXRC & rc(controller().rc()); colors_.apply(); @@ -279,6 +289,7 @@ void FormPreferences::apply() interface_.apply(rc); language_.apply(rc); lnf_misc_.apply(rc); + identity_.apply(rc); outputs_misc_.apply(rc); paths_.apply(rc); printer_.apply(rc); @@ -288,7 +299,7 @@ void FormPreferences::apply() // The "Save" button has been pressed. if (controller().isClosing() && colors_.modifiedXformsPrefs) { string const filename = - AddName(user_lyxdir, "preferences.xform"); + AddName(user_lyxdir(), "preferences.xform"); colors_.modifiedXformsPrefs = !XformsColor::write(filename); } } @@ -296,7 +307,7 @@ void FormPreferences::apply() string const FormPreferences::getFeedback(FL_OBJECT * ob) { - lyx::Assert(ob); + Assert(ob); if (ob->form->fdui == colors_.dialog()) return colors_.feedback(ob); @@ -329,7 +340,7 @@ string const FormPreferences::getFeedback(FL_OBJECT * ob) ButtonPolicy::SMInput FormPreferences::input(FL_OBJECT * ob, long) { - lyx::Assert(ob); + Assert(ob); bool valid = true; @@ -373,6 +384,7 @@ void FormPreferences::update() interface_.update(rc); language_.update(rc); lnf_misc_.update(rc); + identity_.update(rc); outputs_misc_.update(rc); paths_.update(rc); printer_.update(rc); @@ -463,48 +475,16 @@ void FormPreferences::Colors::apply() void FormPreferences::Colors::build() { + picker_.reset(new FormColorpicker); dialog_.reset(build_preferences_colors(&parent_)); fl_set_object_color(dialog_->button_color, GUI_COLOR_CHOICE, GUI_COLOR_CHOICE); - fl_set_object_color(dialog_->dial_hue, GUI_COLOR_HUE_DIAL, FL_BLACK); - fl_set_dial_bounds(dialog_->dial_hue, 0.0, 360.0); - fl_set_dial_step(dialog_->dial_hue, 1.0); - fl_set_dial_return(dialog_->dial_hue, FL_RETURN_CHANGED); - - fl_set_slider_bounds(dialog_->slider_saturation, 0.0, 1.0); - fl_set_slider_step(dialog_->slider_saturation, 0.01); - fl_set_slider_return(dialog_->slider_saturation, FL_RETURN_CHANGED); - - fl_set_slider_bounds(dialog_->slider_value, 0.0, 1.0); - fl_set_slider_step(dialog_->slider_value, 0.01); - fl_set_slider_return(dialog_->slider_value, FL_RETURN_CHANGED); - - fl_set_slider_bounds(dialog_->slider_red, 0.0, 255.0); - fl_set_slider_step(dialog_->slider_red, 1.0); - fl_set_slider_return(dialog_->slider_red, FL_RETURN_CHANGED); - - fl_set_slider_bounds(dialog_->slider_green, 0.0, 255.0); - fl_set_slider_step(dialog_->slider_green, 1.0); - fl_set_slider_return(dialog_->slider_green, FL_RETURN_CHANGED); - - fl_set_slider_bounds(dialog_->slider_blue, 0.0, 255.0); - fl_set_slider_step(dialog_->slider_blue, 1.0); - fl_set_slider_return(dialog_->slider_blue, FL_RETURN_CHANGED); - // set up the feedback mechanism setPrehandler(dialog_->browser_lyx_objs); setPrehandler(dialog_->button_color); setPrehandler(dialog_->button_modify); - setPrehandler(dialog_->dial_hue); - setPrehandler(dialog_->slider_saturation); - setPrehandler(dialog_->slider_value); - setPrehandler(dialog_->slider_red); - setPrehandler(dialog_->slider_green); - setPrehandler(dialog_->slider_blue); - setPrehandler(dialog_->radio_rgb); - setPrehandler(dialog_->radio_hsv); } @@ -517,17 +497,6 @@ FormPreferences::Colors::feedback(FL_OBJECT const * const ob) const if (ob == dialog_->button_modify) return _("Modify the LyX object's color. Note: you must then \"Apply\" the change."); - if (ob == dialog_->dial_hue || - ob == dialog_->slider_saturation || - ob == dialog_->slider_value || - ob == dialog_->slider_red || - ob == dialog_->slider_green || - ob == dialog_->slider_blue) - return _("Find a new color."); - - if (ob == dialog_->radio_rgb || ob == dialog_->radio_hsv) - return _("Toggle between RGB and HSV color spaces."); - return string(); } @@ -537,20 +506,6 @@ void FormPreferences::Colors::input(FL_OBJECT const * const ob) if (ob == dialog_->browser_lyx_objs) { InputBrowserLyX(); - } else if (ob == dialog_->dial_hue || - ob == dialog_->slider_saturation || - ob == dialog_->slider_value) { - InputHSV(); - - } else if (ob == dialog_->slider_red || - ob == dialog_->slider_green || - ob == dialog_->slider_blue) { - InputRGB(); - - } else if (ob == dialog_->radio_rgb || - ob == dialog_->radio_hsv) { - SwitchColorSpace(); - } else if (ob == dialog_->button_modify) { Modify(); } @@ -597,106 +552,7 @@ void FormPreferences::Colors::InputBrowserLyX() const fl_mapcolor(GUI_COLOR_CHOICE, col.r, col.g, col.b); fl_redraw_object(dialog_->button_color); - // Display either RGB or HSV but not both! - SwitchColorSpace(); - - // Deactivate the modify button to begin with... - setEnabled(dialog_->button_modify, false); - - fl_unfreeze_form(dialog_->form); -} - - -void FormPreferences::Colors::InputHSV() -{ - double const hue = fl_get_dial_value(dialog_->dial_hue); - double const sat = fl_get_slider_value(dialog_->slider_saturation); - double const val = fl_get_slider_value(dialog_->slider_value); - - int const h = int(hue); - int const s = int(100.0 * sat); - int const v = int(100.0 * val); - - string const label = tostr(h) + string(", ") + tostr(s) + string(", ") + - tostr(v); - fl_set_object_label(dialog_->text_color_values, label.c_str()); - - RGBColor col = HSVColor(hue, sat, val); - - fl_freeze_form(dialog_->form); - - fl_mapcolor(GUI_COLOR_CHOICE, col.r, col.g, col.b); - fl_redraw_object(dialog_->button_color); - - col = HSVColor(hue, 1.0, 1.0); - col.r = max(col.r, 0); - fl_mapcolor(GUI_COLOR_HUE_DIAL, col.r, col.g, col.b); - fl_redraw_object(dialog_->dial_hue); - - // Ascertain whether to activate the Modify button. - vector::size_type const selLyX = - fl_get_browser(dialog_->browser_lyx_objs); - fl_unfreeze_form(dialog_->form); - if (selLyX < 1) return; - - fl_getmcolor(GUI_COLOR_CHOICE, &col.r, &col.g, &col.b); - bool modify = false; - - // Is the choice an Xforms color... - if (selLyX - 1 < xformsColorDB.size()) { - vector::size_type const i = selLyX - 1; - modify = (xformsColorDB[i].color() != col); - } - // or a LyX Logical color? - else { - vector::size_type const i = selLyX - 1 - - xformsColorDB.size(); - modify = (lyxColorDB[i].color() != col); - } - - setEnabled(dialog_->button_modify, modify); -} - - -void FormPreferences::Colors::InputRGB() -{ - int const red = int(fl_get_slider_value(dialog_->slider_red)); - int const green = int(fl_get_slider_value(dialog_->slider_green)); - int const blue = int(fl_get_slider_value(dialog_->slider_blue)); - - string const label = tostr(red) + string(", ") + tostr(green) + - string(", ") + tostr(blue); - fl_set_object_label(dialog_->text_color_values, label.c_str()); - - fl_freeze_form(dialog_->form); - - RGBColor col = RGBColor(red, green, blue); - fl_mapcolor(GUI_COLOR_CHOICE, col.r, col.g, col.b); - fl_redraw_object(dialog_->button_color); - - // Ascertain whether to activate the Modify button. - vector::size_type const selLyX = - fl_get_browser(dialog_->browser_lyx_objs); - - fl_unfreeze_form(dialog_->form); - if (selLyX < 1) return; - - bool modify = false; - - // Is the choice an Xforms color... - if (selLyX - 1 < xformsColorDB.size()) { - vector::size_type const i = selLyX - 1; - modify = (xformsColorDB[i].color() != col); - } - // or a LyX Logical color? - else { - vector::size_type const i = selLyX - 1 - - xformsColorDB.size(); - modify = (lyxColorDB[i].color() != col); - } - - setEnabled(dialog_->button_modify, modify); } @@ -749,16 +605,13 @@ void FormPreferences::Colors::LoadBrowserLyX() || lc == LColor::inherit || lc == LColor::ignore) continue; - string const name = lcolor.getX11Name(lc); - Display * display = fl_get_display();; - Colormap const colormap = fl_state[fl_get_vclass()].colormap; - XColor xcol, ccol; - - if (XLookupColor(display, colormap, name.c_str(), &xcol, &ccol) - == 0) { + RGBColor col; + bool const success = getRGBColor(lc, col.r, col.g, col.b); + if (!success) { lyxerr << "FormPreferences::Colors::LoadBrowserLyX:\n" << "LColor " << lcolor.getLyXName(lc) - << ": X can't find color \"" << name + << ": X can't find color \"" + << lcolor.getX11Name(lc) << "\". Set to \"black\"!" << endl; string const arg = lcolor.getLyXName(lc) + " black"; @@ -766,16 +619,6 @@ void FormPreferences::Colors::LoadBrowserLyX() continue; } - // X has found the color. Now find the "appropriate" X11 name - // for this color. - - // Note that X stores the RGB values in the range 0 - 65535 - // whilst we require them in the range 0 - 255. - RGBColor col; - col.r = xcol.red / 256; - col.g = xcol.green / 256; - col.b = xcol.blue / 256; - // Create a valid X11 name of the form "#rrggbb" and change the // LColor X11name to this. Don't want to trigger a redraw, // as we're just changing the name not the RGB values. @@ -822,8 +665,15 @@ void FormPreferences::Colors::Modify() if (selLyX < 1) return; - RGBColor col; - fl_getmcolor(GUI_COLOR_CHOICE, &col.r, &col.g, &col.b); + RGBColor before; + fl_getmcolor(GUI_COLOR_CHOICE, &before.r, &before.g, &before.b); + + RGBColor col = picker_->requestColor(before); + if (before == col) + return; + + fl_mapcolor(GUI_COLOR_CHOICE, col.r, col.g, col.b); + fl_redraw_object(dialog_->button_color); // Is the choice an Xforms color... if (selLyX - 1 < xformsColorDB.size()) { @@ -840,86 +690,6 @@ void FormPreferences::Colors::Modify() lyxColorDB[i].g = col.g; lyxColorDB[i].b = col.b; } - - fl_freeze_form(dialog_->form); - setEnabled(dialog_->button_modify, false); - fl_unfreeze_form(dialog_->form); -} - - -void FormPreferences::Colors::SwitchColorSpace() const -{ - bool const hsv = fl_get_button(dialog_->radio_hsv); - - RGBColor col; - fl_getmcolor(GUI_COLOR_CHOICE, &col.r, &col.g, &col.b); - - fl_freeze_form(dialog_->form); - - if (hsv) { - fl_hide_object(dialog_->slider_red); - fl_hide_object(dialog_->slider_blue); - fl_hide_object(dialog_->slider_green); - fl_show_object(dialog_->dial_hue); - fl_show_object(dialog_->slider_saturation); - fl_show_object(dialog_->slider_value); - - HSVColor hsv = HSVColor(col); - hsv.h = max(hsv.h, 0.0); - - fl_set_dial_value(dialog_->dial_hue, hsv.h); - fl_set_slider_value(dialog_->slider_saturation, hsv.s); - fl_set_slider_value(dialog_->slider_value, hsv.v); - - col = HSVColor(hsv.h, 1.0, 1.0); - col.r = max(col.r, 0); - fl_mapcolor(GUI_COLOR_HUE_DIAL, col.r, col.g, col.b); - fl_redraw_object(dialog_->dial_hue); - - // Adjust the label a bit, but not the actual values. - // Means that toggling from one space to the other has no - // effect on the final color. - int const h = int(hsv.h); - int const s = int(100 * hsv.s); - int const v = int(100 * hsv.v); - string const label = tostr(h) + ", " + tostr(s) + - ", " + tostr(v); - fl_set_object_label(dialog_->text_color_values, label.c_str()); - - } else { - fl_show_object(dialog_->slider_red); - fl_show_object(dialog_->slider_blue); - fl_show_object(dialog_->slider_green); - fl_hide_object(dialog_->dial_hue); - fl_hide_object(dialog_->slider_saturation); - fl_hide_object(dialog_->slider_value); - - fl_set_slider_value(dialog_->slider_red, col.r); - fl_set_slider_value(dialog_->slider_green, col.g); - fl_set_slider_value(dialog_->slider_blue, col.b); - - // Adjust the label a bit. Same reasoning as above. - int const r = int(col.r); - int const g = int(col.g); - int const b = int(col.b); - string const label = tostr(r) + ", " + tostr(g) + - ", " + tostr(b); - fl_set_object_label(dialog_->text_color_values, label.c_str()); - } - - fl_unfreeze_form(dialog_->form); -} - -string const FormPreferences::Colors::X11hexname(RGBColor const & col) const -{ - ostringstream ostr; - - ostr << '#' << std::setbase(16) << setfill('0') - << setw(2) << col.r - << setw(2) << col.g - << setw(2) << col.b; - - return STRCONV(ostr.str()); } @@ -962,7 +732,7 @@ string const FormPreferences::Converters::feedback(FL_OBJECT const * const ob) const { if (ob == dialog_->browser_all) - return _("All the currently defined converters known to LyX."); + return _("All explicitly defined converters for LyX"); if (ob == dialog_->choice_from) return _("Convert \"from\" this format"); @@ -1003,9 +773,9 @@ bool FormPreferences::Converters::input(FL_OBJECT const * const ob) return Browser(); if (ob == dialog_->choice_from - || ob == dialog_->choice_to - || ob == dialog_->input_converter - || ob == dialog_->input_flags) + || ob == dialog_->choice_to + || ob == dialog_->input_converter + || ob == dialog_->input_flags) return Input(); if (ob == dialog_->button_add) @@ -1145,7 +915,7 @@ bool FormPreferences::Converters::Input() string const FormPreferences::Converters::GetFrom() const { ::Formats::FormatList::size_type const i = - fl_get_choice(dialog_->choice_from); + fl_get_choice(dialog_->choice_from); if (i > 0 && i <= local_formats.size()) return local_formats.get(i - 1).name(); @@ -1158,7 +928,7 @@ string const FormPreferences::Converters::GetFrom() const string const FormPreferences::Converters::GetTo() const { ::Formats::FormatList::size_type const i = - fl_get_choice(dialog_->choice_to); + fl_get_choice(dialog_->choice_to); if (i > 0 && i <= local_formats.size()) return local_formats.get(i - 1).name(); @@ -1275,10 +1045,10 @@ bool FormPreferences::Formats::input(FL_OBJECT const * const ob) return Browser(); if (ob == dialog_->input_format - || ob == dialog_->input_gui_name - || ob == dialog_->input_shrtcut - || ob == dialog_->input_extension - || ob == dialog_->input_viewer) + || ob == dialog_->input_gui_name + || ob == dialog_->input_shrtcut + || ob == dialog_->input_extension + || ob == dialog_->input_viewer) return Input(); if (ob == dialog_->button_add) @@ -1426,6 +1196,39 @@ bool FormPreferences::Formats::Input() } +FormPreferences::Identity::Identity(FormPreferences & p) + : parent_(p) +{} + + +FD_preferences_identity const * FormPreferences::Identity::dialog() +{ + return dialog_.get(); +} + + +void FormPreferences::Identity::apply(LyXRC & rc) const +{ + rc.user_name = fl_get_input(dialog_->input_user_name); + rc.user_email = fl_get_input(dialog_->input_user_email); +} + + +void FormPreferences::Identity::build() +{ + dialog_.reset(build_preferences_identity(&parent_)); + fl_set_input_return(dialog_->input_user_name, FL_RETURN_CHANGED); + fl_set_input_return(dialog_->input_user_email, FL_RETURN_CHANGED); +} + + +void FormPreferences::Identity::update(LyXRC const & rc) +{ + fl_set_input(dialog_->input_user_name, rc.user_name.c_str()); + fl_set_input(dialog_->input_user_email, rc.user_email.c_str()); +} + + FormPreferences::InputsMisc::InputsMisc(FormPreferences & p) : parent_(p) {} @@ -1491,8 +1294,6 @@ void FormPreferences::Interface::apply(LyXRC & rc) const fl_get_input(dialog_->input_popup_font_encoding); rc.bind_file = fl_get_input(dialog_->input_bind_file); rc.ui_file = fl_get_input(dialog_->input_ui_file); - rc.override_x_deadkeys = - fl_get_button(dialog_->check_override_x_dead_keys); } @@ -1514,7 +1315,6 @@ void FormPreferences::Interface::build() setPrehandler(dialog_->button_bind_file_browse); setPrehandler(dialog_->input_ui_file); setPrehandler(dialog_->button_ui_file_browse); - setPrehandler(dialog_->check_override_x_dead_keys); } @@ -1531,8 +1331,6 @@ FormPreferences::Interface::feedback(FL_OBJECT const * const ob) const return LyXRC::getDescription(LyXRC::RC_BINDFILE); if (ob == dialog_->input_ui_file) return LyXRC::getDescription(LyXRC::RC_UIFILE); - if (ob == dialog_->check_override_x_dead_keys) - return LyXRC::getDescription(LyXRC::RC_OVERRIDE_X_DEADKEYS); return string(); } @@ -1567,8 +1365,6 @@ void FormPreferences::Interface::update(LyXRC const & rc) rc.bind_file.c_str()); fl_set_input(dialog_->input_ui_file, rc.ui_file.c_str()); - fl_set_button(dialog_->check_override_x_dead_keys, - rc.override_x_deadkeys); } @@ -1585,7 +1381,7 @@ FD_preferences_language const * FormPreferences::Language::dialog() void FormPreferences::Language::apply(LyXRC & rc) { - int const pos = combo_default_lang->get(); + int const pos = fl_get_combox(dialog_->combox_default_lang); rc.default_language = lang_[pos-1]; int button = fl_get_button(dialog_->check_use_kbmap); @@ -1639,38 +1435,18 @@ void FormPreferences::Language::build() vector const langs = frnt::getLanguageData(false); lang_ = getSecond(langs); - // The default_language is a combo-box and has to be inserted manually - fl_freeze_form(dialog_->form); - fl_addto_form(dialog_->form); - - FL_OBJECT * obj = dialog_->choice_default_lang; - fl_deactivate_object(dialog_->choice_default_lang); - combo_default_lang.reset(new Combox(FL_COMBOX_DROPLIST)); - combo_default_lang->add(obj->x, obj->y, obj->w, obj->h, 400); - combo_default_lang->shortcut("#L",1); - combo_default_lang->setcallback(ComboCB, &parent_); - + FL_OBJECT * obj = dialog_->combox_default_lang; vector::const_iterator lit = langs.begin(); vector::const_iterator lend = langs.end(); for (; lit != lend; ++lit) { - combo_default_lang->addto(lit->first); + fl_addto_combox(obj, lit->first.c_str()); } - combo_default_lang->select(1); - - fl_end_form(); - fl_unfreeze_form(dialog_->form); + fl_set_combox_browser_height(obj, 400); // set up the feedback mechanism setPrehandler(dialog_->input_package); setPrehandler(dialog_->check_use_kbmap); - - // This is safe, as nothing is done to the pointer, other than - // to use its address in a block-if statement. - // No it's not! Leads to crash. - // setPrehandler( - // reinterpret_cast(combo_default_lang), - // C_FormPreferencesFeedbackCB); - + setPrehandler(dialog_->combox_default_lang); setPrehandler(dialog_->input_kbmap1); setPrehandler(dialog_->input_kbmap2); setPrehandler(dialog_->check_rtl_support); @@ -1691,7 +1467,7 @@ void FormPreferences::Language::build() string const FormPreferences::Language::feedback(FL_OBJECT const * const ob) const { - if (reinterpret_cast(ob) == combo_default_lang.get()) + if (ob == dialog_->combox_default_lang) return LyXRC::getDescription(LyXRC::RC_DEFAULT_LANGUAGE); if (ob == dialog_->check_use_kbmap) return LyXRC::getDescription(LyXRC::RC_KBMAP); @@ -1758,7 +1534,7 @@ void FormPreferences::Language::update(LyXRC const & rc) rc.use_kbmap); int const pos = int(findPos(lang_, rc.default_language)); - combo_default_lang->select(pos + 1); + fl_set_combox(dialog_->combox_default_lang, pos + 1); if (rc.use_kbmap) { fl_set_input(dialog_->input_kbmap1, @@ -1792,15 +1568,6 @@ void FormPreferences::Language::update(LyXRC const & rc) } -void FormPreferences::Language::ComboCB(int, void * v, Combox * combox) -{ - FormPreferences * pre = static_cast(v); - // This is safe, as nothing is done to the pointer, other than - // to use its address in a block-if statement. - pre->bc().valid(pre->input(reinterpret_cast(combox), 0)); -} - - FormPreferences::LnFmisc::LnFmisc(FormPreferences & p) : parent_(p) {} @@ -1827,13 +1594,23 @@ void FormPreferences::LnFmisc::apply(LyXRC & rc) const (fl_get_counter_value(dialog_->counter_wm_jump)); // See FIXME below - // grfx::DisplayType old_value = rc.display_graphics; + // lyx::graphics::DisplayType old_value = rc.display_graphics; switch (fl_get_choice(dialog_->choice_display)) { - case 4: rc.display_graphics = grfx::NoDisplay; break; - case 3: rc.display_graphics = grfx::ColorDisplay; break; - case 2: rc.display_graphics = grfx::GrayscaleDisplay; break; - case 1: rc.display_graphics = grfx::MonochromeDisplay; break; - default: rc.display_graphics = grfx::ColorDisplay; break; + case 4: + rc.display_graphics = lyx::graphics::NoDisplay; + break; + case 3: + rc.display_graphics = lyx::graphics::ColorDisplay; + break; + case 2: + rc.display_graphics = lyx::graphics::GrayscaleDisplay; + break; + case 1: + rc.display_graphics = lyx::graphics::MonochromeDisplay; + break; + default: + rc.display_graphics = lyx::graphics::ColorDisplay; + break; } #ifdef WITH_WARNINGS @@ -1841,7 +1618,7 @@ void FormPreferences::LnFmisc::apply(LyXRC & rc) const #endif #if 0 if (old_value != rc.display_graphics) { - grfx::GCache & gc = grfx::GCache::get(); + lyx::graphics::GCache & gc = lyx::graphics::GCache::get(); gc.changeDisplay(); } #endif @@ -1866,7 +1643,8 @@ void FormPreferences::LnFmisc::build() setPrehandler(dialog_->check_preview_latex); setPrehandler(dialog_->counter_wm_jump); - fl_addto_choice(dialog_->choice_display, _("Monochrome|Grayscale|Color|Do not display")); + fl_addto_choice(dialog_->choice_display, + _("Monochrome|Grayscale|Color|Do not display").c_str()); } @@ -1905,11 +1683,21 @@ void FormPreferences::LnFmisc::update(LyXRC const & rc) fl_set_counter_value(dialog_->counter_wm_jump, rc.wheel_jump); switch (rc.display_graphics) { - case grfx::NoDisplay: fl_set_choice(dialog_->choice_display, 4); break; - case grfx::ColorDisplay: fl_set_choice(dialog_->choice_display, 3); break; - case grfx::GrayscaleDisplay: fl_set_choice(dialog_->choice_display, 2); break; - case grfx::MonochromeDisplay: fl_set_choice(dialog_->choice_display, 1); break; - default: fl_set_choice(dialog_->choice_display, 3); break; + case lyx::graphics::NoDisplay: + fl_set_choice(dialog_->choice_display, 4); + break; + case lyx::graphics::ColorDisplay: + fl_set_choice(dialog_->choice_display, 3); + break; + case lyx::graphics::GrayscaleDisplay: + fl_set_choice(dialog_->choice_display, 2); + break; + case lyx::graphics::MonochromeDisplay: + fl_set_choice(dialog_->choice_display, 1); + break; + default: + fl_set_choice(dialog_->choice_display, 3); + break; } } @@ -1933,7 +1721,7 @@ void FormPreferences::OutputsMisc::apply(LyXRC & rc) const int const choice = fl_get_choice(dialog_->choice_default_papersize) - 1; - rc.default_papersize = static_cast(choice); + rc.default_papersize = static_cast(choice); rc.ascii_roff_command = fl_get_input(dialog_->input_ascii_roff); rc.chktex_command = fl_get_input(dialog_->input_checktex); @@ -1955,7 +1743,8 @@ void FormPreferences::OutputsMisc::build() fl_set_input_return(dialog_->input_paperoption, FL_RETURN_CHANGED); fl_addto_choice(dialog_->choice_default_papersize, - _(" default | US letter | US legal | US executive | A3 | A4 | A5 | B5 ")); + _(" default | US letter | US legal " + "| US executive | A3 | A4 | A5 | B5 ").c_str()); // set up the feedback mechanism setPrehandler(dialog_->counter_line_len); @@ -2195,29 +1984,35 @@ bool FormPreferences::Paths::input(FL_OBJECT const * const ob) } if (ob == dialog_->button_default_path_browse) { - string f = parent_.controller().browse( + string f = parent_.controller().browsedir( fl_get_input(dialog_->input_default_path), _("Default path")); - fl_set_input(dialog_->input_default_path, f.c_str()); + if (!f.empty()) + fl_set_input(dialog_->input_default_path, f.c_str()); } else if (ob == dialog_->button_template_path_browse) { - string f = parent_.controller().browse( + string f = parent_.controller().browsedir( fl_get_input(dialog_->input_template_path), _("Template path")); - fl_set_input(dialog_->input_template_path, f.c_str()); + if (!f.empty()) + fl_set_input(dialog_->input_template_path, f.c_str()); } else if (ob == dialog_->button_temp_dir_browse) { - string f = parent_.controller().browse( + string f = parent_.controller().browsedir( fl_get_input(dialog_->input_temp_dir), _("Temporary dir")); - fl_set_input(dialog_->input_temp_dir, f.c_str()); + if (!f.empty()) + fl_set_input(dialog_->input_temp_dir, f.c_str()); } else if (ob == dialog_->button_lastfiles_browse) { string f = parent_.controller().browse( fl_get_input(dialog_->input_lastfiles), _("Last files")); - fl_set_input(dialog_->input_lastfiles, f.c_str()); + if (!f.empty()) + fl_set_input(dialog_->input_lastfiles, f.c_str()); } else if (ob == dialog_->button_backup_path_browse) { - string f = parent_.controller().browse( + string f = parent_.controller().browsedir( fl_get_input(dialog_->input_backup_path), _("Backup path")); - fl_set_input(dialog_->input_backup_path, f.c_str()); + if (!f.empty()) + fl_set_input(dialog_->input_backup_path, f.c_str()); } else if (ob == dialog_->button_serverpipe_browse) { string f = parent_.controller().browse( fl_get_input(dialog_->input_serverpipe), _("LyX server pipes")); - fl_set_input(dialog_->input_serverpipe, f.c_str()); + if (!f.empty()) + fl_set_input(dialog_->input_serverpipe, f.c_str()); } return activate; @@ -2476,6 +2271,7 @@ void FormPreferences::ScreenFonts::apply(LyXRC & rc) const if (rc.font_norm != str) { changed = true; rc.font_norm = str; + rc.set_font_norm_type(); } bool button = fl_get_button(dialog_->check_scalable); @@ -2640,16 +2436,16 @@ FormPreferences::ScreenFonts::feedback(FL_OBJECT const * const ob) const if (ob == dialog_->counter_dpi) return LyXRC::getDescription(LyXRC::RC_SCREEN_DPI); if (ob == dialog_->input_tiny - || ob == dialog_->input_script - || ob == dialog_->input_footnote - || ob == dialog_->input_small - || ob == dialog_->input_large - || ob == dialog_->input_larger - || ob == dialog_->input_larger - || ob == dialog_->input_largest - || ob == dialog_->input_normal - || ob == dialog_->input_huge - || ob == dialog_->input_huger) + || ob == dialog_->input_script + || ob == dialog_->input_footnote + || ob == dialog_->input_small + || ob == dialog_->input_large + || ob == dialog_->input_larger + || ob == dialog_->input_larger + || ob == dialog_->input_largest + || ob == dialog_->input_normal + || ob == dialog_->input_huge + || ob == dialog_->input_huger) return LyXRC::getDescription(LyXRC::RC_SCREEN_FONT_SIZES); return string(); } @@ -2696,7 +2492,7 @@ bool FormPreferences::ScreenFonts::input() strToDbl(fl_get_input(dialog_->input_huger))) { activate = false; - str = _("Fonts must be input in the order tiny > script> footnote > small > normal > large > larger > largest > huge > huger."); + str = _("Fonts must be input in the order Tiny > Smallest > Smaller > Small > Normal > Large > Larger > Largest > Huge > Huger."); } if (!activate) @@ -2825,7 +2621,7 @@ void FormPreferences::SpellOptions::build() dialog_.reset(build_preferences_spelloptions(&parent_)); fl_addto_choice(dialog_->choice_spell_command, - _(" ispell | aspell ")); + _(" ispell | aspell ").c_str()); fl_set_input_return(dialog_->input_alt_lang, FL_RETURN_CHANGED); fl_set_input_return(dialog_->input_escape_chars, FL_RETURN_CHANGED); fl_set_input_return(dialog_->input_personal_dict, FL_RETURN_CHANGED);