2006-02-05 21:57:17 +00:00
|
|
|
/**
|
|
|
|
* \file GPreferences.C
|
|
|
|
* This file is part of LyX, the document processor.
|
|
|
|
* Licence details can be found in the file COPYING.
|
|
|
|
*
|
|
|
|
* \author John Spray
|
|
|
|
*
|
|
|
|
* Full author contact details are available in file CREDITS.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <config.h>
|
|
|
|
|
|
|
|
// Too hard to make concept checks work with this file
|
|
|
|
#ifdef _GLIBCXX_CONCEPT_CHECKS
|
|
|
|
#undef _GLIBCXX_CONCEPT_CHECKS
|
|
|
|
#endif
|
|
|
|
#ifdef _GLIBCPP_CONCEPT_CHECKS
|
|
|
|
#undef _GLIBCPP_CONCEPT_CHECKS
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "GPreferences.h"
|
|
|
|
#include "ControlPrefs.h"
|
|
|
|
#include "ghelpers.h"
|
|
|
|
|
2006-02-12 15:03:50 +00:00
|
|
|
#include "controllers/frnt_lang.h"
|
|
|
|
#include "controllers/helper_funcs.h"
|
|
|
|
#include "support/lstrings.h"
|
2006-02-05 21:57:17 +00:00
|
|
|
|
|
|
|
#include <libglademm.h>
|
|
|
|
|
|
|
|
using std::string;
|
2006-02-12 15:03:50 +00:00
|
|
|
using std::vector;
|
2006-02-05 21:57:17 +00:00
|
|
|
|
|
|
|
namespace lyx {
|
|
|
|
namespace frontend {
|
|
|
|
|
|
|
|
GPreferences::GPreferences(Dialog & parent)
|
|
|
|
: GViewCB<ControlPrefs, GViewGladeB>(parent, _("Preferences"), false)
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
|
|
void GPreferences::doBuild()
|
|
|
|
{
|
2006-02-17 17:05:24 +00:00
|
|
|
std::cerr << ">>doBuild\n";
|
2006-02-05 21:57:17 +00:00
|
|
|
string const gladeName = findGladeFile("preferences");
|
|
|
|
xml_ = Gnome::Glade::Xml::create(gladeName);
|
|
|
|
|
|
|
|
Gtk::Button *button;
|
|
|
|
xml_->get_widget("Cancel", button);
|
|
|
|
setCancel(button);
|
|
|
|
xml_->get_widget("OK", button);
|
|
|
|
setOK(button);
|
|
|
|
xml_->get_widget("Apply", button);
|
|
|
|
setApply(button);
|
|
|
|
xml_->get_widget("Revert", button);
|
|
|
|
setRestore(button);
|
|
|
|
|
2006-02-12 15:03:50 +00:00
|
|
|
Gtk::HBox *box = NULL;
|
2006-02-05 21:57:17 +00:00
|
|
|
|
|
|
|
// *** Screen fonts ***
|
|
|
|
// FIXME: these font buttons display a dialog
|
2006-02-06 22:52:53 +00:00
|
|
|
// with options for size and bold/etc which are
|
2006-02-05 21:57:17 +00:00
|
|
|
// ignored
|
|
|
|
xml_->get_widget("Roman", romanfontbutton_);
|
|
|
|
xml_->get_widget("SansSerif", sansseriffontbutton_);
|
|
|
|
xml_->get_widget("TypeWriter", typewriterfontbutton_);
|
|
|
|
Gtk::SpinButton *spin;
|
|
|
|
xml_->get_widget("ScreenDPI", spin);
|
|
|
|
dpiadj_ = spin->get_adjustment();
|
|
|
|
xml_->get_widget("Zoom", spin);
|
|
|
|
zoomadj_ = spin->get_adjustment();
|
2006-02-07 22:29:13 +00:00
|
|
|
|
|
|
|
// *** Graphics ***
|
|
|
|
xml_->get_widget("GraphicsColor", graphicscolorradio_);
|
|
|
|
xml_->get_widget("GraphicsGrayscale", graphicsgrayscaleradio_);
|
|
|
|
xml_->get_widget("GraphicsMonochrome", graphicsmonoradio_);
|
|
|
|
xml_->get_widget("GraphicsDoNotDisplay", graphicsnoneradio_);
|
|
|
|
|
|
|
|
xml_->get_widget("InstantPreviewOn", instprevonradio_);
|
|
|
|
xml_->get_widget("InstantPreviewOff", instprevoffradio_);
|
|
|
|
xml_->get_widget("InstantPreviewNoMath", instprevnomathradio_);
|
|
|
|
|
|
|
|
// *** Keyboard ***
|
|
|
|
xml_->get_widget("UseKeyboardMap", keyboardmapcheck_);
|
2006-02-17 17:05:24 +00:00
|
|
|
xml_->get_widget("FirstKeyboardMap", keyboardmap1fcbutton_);
|
|
|
|
xml_->get_widget("SecondKeyboardMap", keyboardmap2fcbutton_);
|
2006-02-07 22:29:13 +00:00
|
|
|
|
|
|
|
Gtk::FileFilter kmapfilter;
|
|
|
|
kmapfilter.set_name ("LyX keyboard maps");
|
|
|
|
kmapfilter.add_pattern ("*.kmap");
|
|
|
|
Gtk::FileFilter allfilter;
|
|
|
|
allfilter.set_name ("All files");
|
|
|
|
allfilter.add_pattern ("*");
|
|
|
|
|
2006-02-12 15:03:50 +00:00
|
|
|
keyboardmap1fcbutton_->add_filter (kmapfilter);
|
|
|
|
keyboardmap1fcbutton_->add_filter (allfilter);
|
|
|
|
keyboardmap1fcbutton_->set_filter (kmapfilter);
|
|
|
|
keyboardmap2fcbutton_->add_filter (kmapfilter);
|
|
|
|
keyboardmap2fcbutton_->add_filter (allfilter);
|
|
|
|
keyboardmap2fcbutton_->set_filter (kmapfilter);
|
2006-02-07 22:29:13 +00:00
|
|
|
|
|
|
|
keyboardmapcheck_->signal_toggled().connect(
|
|
|
|
sigc::mem_fun(*this, &GPreferences::keyboard_sensitivity));
|
2006-02-12 15:03:50 +00:00
|
|
|
|
|
|
|
// *** Language ***
|
|
|
|
|
|
|
|
xml_->get_widget("DefaultLanguage", box);
|
|
|
|
box->pack_start (defaultlanguagecombo_);
|
|
|
|
defaultlanguagecombo_.show();
|
|
|
|
xml_->get_widget("LanguagePackage", languagepackageentry_);
|
|
|
|
xml_->get_widget("CommandStart", commandstartentry_);
|
|
|
|
xml_->get_widget("CommandEnd", commandendentry_);
|
|
|
|
xml_->get_widget("UseBabel", usebabelcheck_);
|
|
|
|
xml_->get_widget("MarkForeignLanguages", markforeigncheck_);
|
|
|
|
xml_->get_widget("Global", globalcheck_);
|
|
|
|
xml_->get_widget("RTLSupport", RTLsupportcheck_);
|
|
|
|
xml_->get_widget("AutoBegin", autobegincheck_);
|
|
|
|
xml_->get_widget("AutoEnd", autoendcheck_);
|
|
|
|
|
|
|
|
// Store the lang identifiers for later
|
|
|
|
vector<LanguagePair> const langs = getLanguageData(false);
|
|
|
|
lang_ = getSecond(langs);
|
|
|
|
|
|
|
|
vector<LanguagePair>::const_iterator lit = langs.begin();
|
|
|
|
vector<LanguagePair>::const_iterator const lend = langs.end();
|
|
|
|
for (; lit != lend; ++lit) {
|
|
|
|
defaultlanguagecombo_.append_text(lit->first);
|
|
|
|
}
|
2006-02-17 17:05:24 +00:00
|
|
|
|
|
|
|
// *** Spellchecker ***
|
|
|
|
xml_->get_widget("Spellchecker", box);
|
|
|
|
box->pack_start(spellcheckercombo_);
|
|
|
|
spellcheckercombo_.show();
|
|
|
|
xml_->get_widget("AlternativeLanguage", alternativelanguageentry_);
|
|
|
|
xml_->get_widget("EscapeCharacters", escapecharactersentry_);
|
|
|
|
xml_->get_widget("PersonalDictionary", personaldictionaryfcbutton_);
|
|
|
|
xml_->get_widget("AcceptCompoundWords", acceptcompoundcheck_);
|
|
|
|
xml_->get_widget("UseInputEncoding", useinputenccheck_);
|
|
|
|
|
|
|
|
Gtk::FileFilter ispellfilter;
|
|
|
|
ispellfilter.set_name ("iSpell Dictionary Files");
|
|
|
|
ispellfilter.add_pattern ("*.ispell");
|
|
|
|
|
|
|
|
personaldictionaryfcbutton_->add_filter (ispellfilter);
|
|
|
|
personaldictionaryfcbutton_->add_filter (allfilter);
|
|
|
|
personaldictionaryfcbutton_->set_filter (ispellfilter);
|
|
|
|
|
|
|
|
spellcheckercombo_.append_text ("ispell");
|
|
|
|
spellcheckercombo_.append_text ("aspell");
|
|
|
|
spellcheckercombo_.append_text ("hspell");
|
|
|
|
#ifdef USE_PSPELL
|
|
|
|
spellcheckercombo_.append_text (_("pspell (library)"));
|
|
|
|
#else
|
|
|
|
#ifdef USE_ASPELL
|
|
|
|
spellcheckercombo_.append_text (_("aspell (library)"));
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2006-02-05 21:57:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void GPreferences::update()
|
|
|
|
{
|
|
|
|
LyXRC const & rc(controller().rc());
|
|
|
|
|
2006-02-17 17:05:24 +00:00
|
|
|
std::cerr << ">> update\n";
|
|
|
|
|
2006-02-06 22:52:53 +00:00
|
|
|
// *** Screen fonts ***
|
2006-02-13 17:51:11 +00:00
|
|
|
Glib::ustring gtk_roman_font_name = rc.roman_font_name + ", 12";
|
|
|
|
std::cerr << "Rc's roman_font_name is '" << rc.roman_font_name << "'\n";
|
|
|
|
std::cerr << "Our roman_font_name is '" << gtk_roman_font_name << "'\n";
|
|
|
|
romanfontbutton_->set_font_name(gtk_roman_font_name);
|
|
|
|
Glib::ustring gtk_sans_font_name = rc.sans_font_name + ", 12";
|
|
|
|
sansseriffontbutton_->set_font_name(gtk_sans_font_name);
|
|
|
|
Glib::ustring gtk_typewriter_font_name = rc.typewriter_font_name + ", 12";
|
|
|
|
typewriterfontbutton_->set_font_name(gtk_typewriter_font_name);
|
2006-02-05 21:57:17 +00:00
|
|
|
|
|
|
|
zoomadj_->set_value (rc.zoom);
|
|
|
|
dpiadj_->set_value (rc.dpi);
|
|
|
|
|
2006-02-07 22:29:13 +00:00
|
|
|
// *** Graphics ***
|
|
|
|
switch (rc.display_graphics) {
|
|
|
|
case graphics::NoDisplay:
|
|
|
|
graphicsnoneradio_->set_active();
|
|
|
|
break;
|
|
|
|
case graphics::MonochromeDisplay:
|
|
|
|
graphicsmonoradio_->set_active();
|
|
|
|
break;
|
|
|
|
case graphics::GrayscaleDisplay:
|
|
|
|
graphicsgrayscaleradio_->set_active();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
case graphics::ColorDisplay:
|
|
|
|
graphicscolorradio_->set_active();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (rc.preview) {
|
|
|
|
case LyXRC::PREVIEW_ON:
|
|
|
|
instprevonradio_->set_active();
|
|
|
|
break;
|
|
|
|
case LyXRC::PREVIEW_NO_MATH:
|
|
|
|
instprevnomathradio_->set_active();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
case LyXRC::PREVIEW_OFF:
|
|
|
|
instprevoffradio_->set_active();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
// *** Keyboard ***
|
|
|
|
keyboardmapcheck_->set_active (rc.use_kbmap);
|
2006-02-12 15:03:50 +00:00
|
|
|
keyboardmap1fcbutton_->set_filename (rc.primary_kbmap);
|
|
|
|
keyboardmap2fcbutton_->set_filename (rc.secondary_kbmap);
|
|
|
|
keyboardmap1fcbutton_->set_sensitive (rc.use_kbmap);
|
|
|
|
keyboardmap2fcbutton_->set_sensitive (rc.use_kbmap);
|
|
|
|
|
|
|
|
// *** Language ***
|
|
|
|
int const pos = int(findPos(lang_, rc.default_language));
|
|
|
|
defaultlanguagecombo_.set_active(pos);
|
|
|
|
|
|
|
|
languagepackageentry_->set_text(rc.language_package);
|
|
|
|
commandstartentry_->set_text(rc.language_command_begin);
|
|
|
|
commandendentry_->set_text(rc.language_command_end);
|
|
|
|
|
|
|
|
usebabelcheck_->set_active(rc.language_use_babel);
|
|
|
|
markforeigncheck_->set_active(rc.mark_foreign_language);
|
|
|
|
globalcheck_->set_active(rc.language_global_options);
|
|
|
|
RTLsupportcheck_->set_active(rc.rtl_support);
|
|
|
|
autobegincheck_->set_active(rc.language_auto_begin);
|
|
|
|
autoendcheck_->set_active(rc.language_auto_end);
|
2006-02-07 22:29:13 +00:00
|
|
|
|
2006-02-17 17:05:24 +00:00
|
|
|
// *** Spellchecker ***
|
|
|
|
spellcheckercombo_.set_active (0);
|
|
|
|
|
|
|
|
if (rc.isp_command == "ispell") {
|
|
|
|
spellcheckercombo_.set_active (0);
|
|
|
|
} else if (rc.isp_command == "aspell") {
|
|
|
|
spellcheckercombo_.set_active (1);
|
|
|
|
} else if (rc.isp_command == "hspell") {
|
|
|
|
spellcheckercombo_.set_active (2);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (rc.use_spell_lib) {
|
|
|
|
#if defined(USE_ASPELL) || defined(USE_PSPELL)
|
|
|
|
spellcheckercombo_.set_active (3);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
// FIXME: remove isp_use_alt_lang
|
|
|
|
alternativelanguageentry_->set_text(rc.isp_alt_lang);
|
|
|
|
// FIXME: remove isp_use_esc_chars
|
|
|
|
escapecharactersentry_->set_text(rc.isp_esc_chars);
|
|
|
|
// FIXME: remove isp_use_pers_dict
|
|
|
|
personaldictionaryfcbutton_->set_filename(rc.isp_pers_dict);
|
|
|
|
acceptcompoundcheck_->set_active(rc.isp_accept_compound);
|
|
|
|
useinputenccheck_->set_active(rc.isp_use_input_encoding);
|
|
|
|
|
2006-02-05 21:57:17 +00:00
|
|
|
bc().valid();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void GPreferences::apply()
|
|
|
|
{
|
|
|
|
LyXRC & rc(controller().rc());
|
|
|
|
|
|
|
|
// *** Screen fonts ***
|
2006-02-07 22:29:13 +00:00
|
|
|
LyXRC const oldrc(rc);
|
|
|
|
|
2006-02-05 21:57:17 +00:00
|
|
|
rc.roman_font_name = Pango::FontDescription(
|
|
|
|
romanfontbutton_->get_font_name()).get_family ();
|
2006-02-13 17:51:11 +00:00
|
|
|
std::cerr << "Button's font_name is '" << romanfontbutton_->get_font_name() << "'\n";
|
|
|
|
std::cerr << "Setting font name to :\n";
|
|
|
|
std::cerr << "\t'" << Pango::FontDescription(
|
|
|
|
romanfontbutton_->get_font_name()).get_family () << "'\n";
|
2006-02-05 21:57:17 +00:00
|
|
|
rc.roman_font_foundry = "";
|
|
|
|
rc.sans_font_name = Pango::FontDescription(
|
|
|
|
sansseriffontbutton_->get_font_name()).get_family ();
|
|
|
|
rc.sans_font_foundry = "";
|
|
|
|
rc.typewriter_font_name = Pango::FontDescription(
|
|
|
|
typewriterfontbutton_->get_font_name()).get_family ();
|
|
|
|
rc.typewriter_font_foundry = "";
|
2006-02-06 22:52:53 +00:00
|
|
|
|
2006-02-07 22:29:13 +00:00
|
|
|
rc.zoom = static_cast<int>(zoomadj_->get_value());
|
|
|
|
rc.dpi = static_cast<int>(dpiadj_->get_value());
|
|
|
|
|
|
|
|
if (rc.font_sizes != oldrc.font_sizes
|
|
|
|
|| rc.roman_font_name != oldrc.roman_font_name
|
|
|
|
|| rc.sans_font_name != oldrc.sans_font_name
|
|
|
|
|| rc.typewriter_font_name != oldrc.typewriter_font_name
|
|
|
|
|| rc.zoom != oldrc.zoom || rc.dpi != oldrc.dpi) {
|
|
|
|
controller().updateScreenFonts();
|
|
|
|
}
|
|
|
|
|
|
|
|
// *** Graphics ***
|
|
|
|
if (graphicsnoneradio_->get_active())
|
|
|
|
rc.display_graphics = graphics::NoDisplay;
|
|
|
|
else if (graphicsgrayscaleradio_->get_active())
|
|
|
|
rc.display_graphics = graphics::GrayscaleDisplay;
|
|
|
|
else if (graphicsmonoradio_->get_active())
|
|
|
|
rc.display_graphics = graphics::MonochromeDisplay;
|
|
|
|
else
|
|
|
|
rc.display_graphics = graphics::ColorDisplay;
|
|
|
|
|
|
|
|
if (instprevonradio_->get_active())
|
|
|
|
rc.preview = LyXRC::PREVIEW_ON;
|
|
|
|
else if (instprevnomathradio_->get_active())
|
|
|
|
rc.preview = LyXRC::PREVIEW_NO_MATH;
|
|
|
|
else
|
|
|
|
rc.preview = LyXRC::PREVIEW_OFF;
|
|
|
|
|
|
|
|
// *** Keyboard ***
|
|
|
|
rc.use_kbmap = keyboardmapcheck_->get_active();
|
|
|
|
if (rc.use_kbmap) {
|
2006-02-12 15:03:50 +00:00
|
|
|
rc.primary_kbmap = keyboardmap1fcbutton_->get_filename();
|
|
|
|
rc.secondary_kbmap = keyboardmap2fcbutton_->get_filename();
|
2006-02-07 22:29:13 +00:00
|
|
|
}
|
2006-02-12 15:03:50 +00:00
|
|
|
|
|
|
|
// *** Language ***
|
|
|
|
rc.default_language = lang_[
|
|
|
|
defaultlanguagecombo_.get_active_row_number()];
|
|
|
|
|
|
|
|
rc.language_package = languagepackageentry_->get_text();
|
|
|
|
rc.language_command_begin = commandstartentry_->get_text();
|
|
|
|
rc.language_command_end = commandendentry_->get_text();
|
|
|
|
|
|
|
|
rc.language_use_babel = usebabelcheck_->get_active();
|
|
|
|
rc.mark_foreign_language = markforeigncheck_->get_active();
|
|
|
|
rc.language_global_options = globalcheck_->get_active();
|
|
|
|
rc.rtl_support = RTLsupportcheck_->get_active();
|
|
|
|
rc.language_auto_begin = autobegincheck_->get_active();
|
|
|
|
rc.language_auto_end = autoendcheck_->get_active();
|
2006-02-05 21:57:17 +00:00
|
|
|
|
2006-02-17 17:05:24 +00:00
|
|
|
// *** Spellchecker ***
|
|
|
|
switch (spellcheckercombo_.get_active_row_number()) {
|
|
|
|
case 0:
|
|
|
|
case 1:
|
|
|
|
case 2:
|
|
|
|
rc.use_spell_lib = false;
|
|
|
|
rc.isp_command = spellcheckercombo_.get_active_text();
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
rc.use_spell_lib = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
// FIXME: remove isp_use_alt_lang
|
|
|
|
rc.isp_alt_lang = alternativelanguageentry_->get_text();
|
|
|
|
rc.isp_use_alt_lang = !rc.isp_alt_lang.empty();
|
|
|
|
// FIXME: remove isp_use_esc_chars
|
|
|
|
rc.isp_esc_chars = escapecharactersentry_->get_text();
|
|
|
|
rc.isp_use_esc_chars = !rc.isp_esc_chars.empty();
|
|
|
|
// FIXME: remove isp_use_pers_dict
|
|
|
|
rc.isp_pers_dict = personaldictionaryfcbutton_->get_filename();
|
|
|
|
rc.isp_use_pers_dict = !rc.isp_pers_dict.empty();
|
|
|
|
rc.isp_accept_compound = acceptcompoundcheck_->get_active();
|
|
|
|
rc.isp_use_input_encoding = useinputenccheck_->get_active();
|
|
|
|
|
2006-02-05 21:57:17 +00:00
|
|
|
// Prevent Apply button ever getting disabled
|
|
|
|
bc().valid();
|
|
|
|
}
|
|
|
|
|
2006-02-07 22:29:13 +00:00
|
|
|
|
|
|
|
void GPreferences::keyboard_sensitivity ()
|
|
|
|
{
|
|
|
|
bool const kbmap = keyboardmapcheck_->get_active();
|
2006-02-12 15:03:50 +00:00
|
|
|
keyboardmap1fcbutton_->set_sensitive(kbmap);
|
|
|
|
keyboardmap2fcbutton_->set_sensitive(kbmap);
|
2006-02-07 22:29:13 +00:00
|
|
|
}
|
|
|
|
|
2006-02-17 17:05:24 +00:00
|
|
|
|
2006-02-05 21:57:17 +00:00
|
|
|
} // namespace frontend
|
|
|
|
} // namespace lyx
|