From 931a49cc87b8ea31aee185b20457b1abc7587595 Mon Sep 17 00:00:00 2001 From: Angus Leeming Date: Wed, 31 Mar 2004 16:50:59 +0000 Subject: [PATCH] A new LFUN_LYXRC_APPLY lfun, together with a bit of a clean-up of the preferences dialog code. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8570 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/ChangeLog | 10 ++ src/LyXAction.C | 1 + src/frontends/controllers/ChangeLog | 8 ++ src/frontends/controllers/ControlPrefs.C | 133 ++++++++++++----------- src/frontends/controllers/ControlPrefs.h | 37 ++++--- src/frontends/qt2/ChangeLog | 5 + src/frontends/qt2/QPrefs.C | 19 ++-- src/frontends/qt2/QPrefs.h | 13 +-- src/frontends/qt2/QPrefsDialog.C | 66 +++++------ src/frontends/xforms/ChangeLog | 5 + src/frontends/xforms/FormPreferences.C | 93 ++++++++-------- src/frontends/xforms/FormPreferences.h | 18 +-- src/lfuns.h | 1 + src/lyxfunc.C | 13 +++ src/lyxrc.C | 33 +++++- src/lyxrc.h | 12 +- 16 files changed, 281 insertions(+), 186 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 44b40bfc1b..34db1e9d05 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2004-03-31 Angus Leeming + + * lfuns.h: + * LyXAction.C: new lfun LFUN_LYXRC_APPLY. + + * lyxrc.[Ch] (read, write): overloaded member functions taking + a std::[io]stream arguments. + + * lyxfunc.C (getStatus, dispatch): handle LFUN_LYXRC_APPLY. + 2004-03-31 Angus Leeming * lyxfunc.C (loadTextclass): new helper function, invoked by two of diff --git a/src/LyXAction.C b/src/LyXAction.C index f77ed7374f..fcf85954d4 100644 --- a/src/LyXAction.C +++ b/src/LyXAction.C @@ -334,6 +334,7 @@ void LyXAction::init() { LFUN_TEXTCLASS_LOAD, "textclass-load", Noop }, { LFUN_SAVE_AS_DEFAULT, "buffer-save-as-default", Noop }, { LFUN_BUFFERPARAMS_APPLY, "buffer-params-apply", Noop }, + { LFUN_LYXRC_APPLY, "lyxrc-apply", NoBuffer }, { LFUN_NOACTION, "", Noop } }; diff --git a/src/frontends/controllers/ChangeLog b/src/frontends/controllers/ChangeLog index 4cab6a2f48..cd7a7e592f 100644 --- a/src/frontends/controllers/ChangeLog +++ b/src/frontends/controllers/ChangeLog @@ -1,3 +1,11 @@ +2004-03-31 Angus Leeming + + * ControlPrefs.C: a bit of an overhaul, moving the local Converters + and Formats variables out of the various frontends to here, + and ensuring that nothing is actually dispatched to the core except + from apply(). + Also use the new LFUN_LYXRC_APPLY lfun. + 2004-03-30 Angus Leeming * ControlDocument.[Ch]: converted to the dialog-based scheme. diff --git a/src/frontends/controllers/ControlPrefs.C b/src/frontends/controllers/ControlPrefs.C index 35b225e2b7..aeb590e4a5 100644 --- a/src/frontends/controllers/ControlPrefs.C +++ b/src/frontends/controllers/ControlPrefs.C @@ -16,12 +16,9 @@ #include "ViewBase.h" #include "bufferlist.h" -#include "converter.h" -#include "format.h" #include "gettext.h" #include "funcrequest.h" #include "LColor.h" -#include "lfuns.h" #include "frontends/Dialogs.h" #include "frontends/LyXView.h" @@ -30,6 +27,8 @@ #include "support/globbing.h" #include "support/path_defines.h" +#include "support/std_sstream.h" + #include using lyx::support::AddName; @@ -37,30 +36,66 @@ using lyx::support::FileFilterList; using lyx::support::system_lyxdir; using lyx::support::user_lyxdir; +using std::ostringstream; using std::pair; using std::string; +using std::vector; extern BufferList bufferlist; ControlPrefs::ControlPrefs(LyXView & lv, Dialogs & d) - : ControlDialogBI(lv, d) + : ControlDialogBI(lv, d), + redraw_gui_(false), + update_screen_font_(false) {} void ControlPrefs::setParams() { rc_ = lyxrc; + formats_ = ::formats; + converters_ = ::converters; + converters_.update(formats_); + colors_.clear(); + redraw_gui_ = false; + update_screen_font_ = false; } void ControlPrefs::apply() { view().apply(); - lyxrc = rc_; + ostringstream ss; + rc_.write(ss); + lv_.dispatch(FuncRequest(LFUN_LYXRC_APPLY, ss.str())); + + // FIXME: these need lfuns bufferlist.setCurrentAuthor(rc_.user_name, rc_.user_email); + ::formats = formats_; + + ::converters = converters_; + ::converters.update(::formats); + ::converters.buildGraph(); + + vector::const_iterator it = colors_.begin(); + vector::const_iterator const end = colors_.end(); + for (; it != end; ++it) + lv_.dispatch(FuncRequest(LFUN_SET_COLOR, *it)); + colors_.clear(); + + if (redraw_gui_) { + lv_.getDialogs().redrawGUI(); + redraw_gui_ = false; + } + + if (update_screen_font_) { + lv_.dispatch(FuncRequest(LFUN_SCREEN_FONT_UPDATE)); + update_screen_font_ = false; + } + // The Save button has been pressed if (isClosing()) { lv_.dispatch(FuncRequest(LFUN_SAVEPREFERENCES)); @@ -68,17 +103,31 @@ void ControlPrefs::apply() } +void ControlPrefs::redrawGUI() +{ + redraw_gui_ = true; +} + + +void ControlPrefs::setColor(LColor_color col, string const & hex) +{ + colors_.push_back(lcolor.getLyXName(col) + ' ' + hex); +} + + +void ControlPrefs::updateScreenFonts() +{ + update_screen_font_ = true; +} + + string const ControlPrefs::browsebind(string const & file) const { - string dir = AddName(system_lyxdir(), "bind"); - // FIXME: stupid name - string name = _("System Bind|#S#s"); - pair dir1(name, dir); + pair dir1(_("System Bind|#S#s"), + AddName(system_lyxdir(), "bind")); - dir = AddName(user_lyxdir(), "bind"); - // FIXME: stupid name - name = _("User Bind|#U#u"); - pair dir2(name, dir); + pair dir2(_("User Bind|#U#u"), + AddName(user_lyxdir(), "bind")); return browseFile(file, _("Choose bind file"), FileFilterList("*.bind"), false, dir1, dir2); @@ -87,15 +136,11 @@ string const ControlPrefs::browsebind(string const & file) const string const ControlPrefs::browseUI(string const & file) const { - string dir = AddName(system_lyxdir(), "ui"); - // FIXME: stupid name - string name = _("Sys UI|#S#s"); - pair dir1(name, dir); + pair const dir1(_("Sys UI|#S#s"), + AddName(system_lyxdir(), "ui")); - dir = AddName(user_lyxdir(), "ui"); - // FIXME: stupid name - name = _("User UI|#U#u"); - pair dir2(name, dir); + pair const dir2(_("User UI|#U#u"), + AddName(user_lyxdir(), "ui")); return browseFile(file, _("Choose UI file"), FileFilterList("*.ui"), false, dir1, dir2); @@ -104,12 +149,11 @@ string const ControlPrefs::browseUI(string const & file) const string const ControlPrefs::browsekbmap(string const & file) const { - string const dir = AddName(system_lyxdir(), "kbd"); - string const name = _("Key maps|#K#k"); - pair dir1(name, dir); + pair dir(_("Key maps|#K#k"), + AddName(system_lyxdir(), "kbd")); return browseFile(file, _("Choose keyboard map"), - FileFilterList("*.kmap"), false, dir1); + FileFilterList("*.kmap"), false, dir); } @@ -132,42 +176,3 @@ string const ControlPrefs::browsedir(string const & path, { return browseDir(path, title); } - - -void ControlPrefs::redrawGUI() -{ - // we must be sure to get the new values first - lyxrc = rc_; - - lv_.getDialogs().redrawGUI(); -} - - -void ControlPrefs::setColor(LColor_color col, string const & hex) -{ - string const s = lcolor.getLyXName(col) + ' ' + hex; - lv_.dispatch(FuncRequest(LFUN_SET_COLOR, s)); -} - - -void ControlPrefs::updateScreenFonts() -{ - // we must be sure to get the new values first - lyxrc = rc_; - - lv_.dispatch(FuncRequest(LFUN_SCREEN_FONT_UPDATE)); -} - - -void ControlPrefs::setConverters(Converters const & conv) -{ - converters = conv; - converters.update(formats); - converters.buildGraph(); -} - - -void ControlPrefs::setFormats(Formats const & form) -{ - formats = form; -} diff --git a/src/frontends/controllers/ControlPrefs.h b/src/frontends/controllers/ControlPrefs.h index 3e2f0768ee..63e455cc94 100644 --- a/src/frontends/controllers/ControlPrefs.h +++ b/src/frontends/controllers/ControlPrefs.h @@ -12,27 +12,30 @@ #ifndef CONTROLPREFS_H #define CONTROLPREFS_H - #include "ControlDialog_impl.h" +#include "converter.h" +#include "format.h" #include "lyxrc.h" +#include +#include -class Converters; class LColor_color; -class Formats; + class ControlPrefs : public ControlDialogBI { public: ControlPrefs(LyXView &, Dialogs &); - // FIXME: we should probably devolve the individual - // settings to methods here. But for now, this will - // do - LyXRC & rc() { return rc_; } - LyXRC const & rc() const { return rc_; } + Converters & converters() { return converters_; } + Converters const & converters() const { return converters_; } + + Formats & formats() { return formats_; } + Formats const & formats() const { return formats_; } + /// various file pickers std::string const browsebind(std::string const & file) const; std::string const browseUI(std::string const & file) const; @@ -56,12 +59,6 @@ public: /// update the screen fonts after change void updateScreenFonts(); - /// set global converters - void setConverters(Converters const & conv); - - /// set global formats - void setFormats(Formats const & form); - private: /// get current lyxrc virtual void setParams(); @@ -71,6 +68,18 @@ private: /// temporary lyxrc LyXRC rc_; + + /// temporary converters + Converters converters_; + + /// temporary formats + Formats formats_; + + /// A list of colors to be dispatched + std::vector colors_; + + bool redraw_gui_; + bool update_screen_font_; }; #endif // CONTROLPREFS_H diff --git a/src/frontends/qt2/ChangeLog b/src/frontends/qt2/ChangeLog index 7885b8e6dc..65a9beeebb 100644 --- a/src/frontends/qt2/ChangeLog +++ b/src/frontends/qt2/ChangeLog @@ -1,3 +1,8 @@ +2004-03-31 Angus Leeming + + * QPrefs.[Ch]: + * QPrefsDialog.C: changes due to the changed ControlPrefs interface. + 2004-03-30 Angus Leeming * Dialogs.C (build): added document dialog. diff --git a/src/frontends/qt2/QPrefs.C b/src/frontends/qt2/QPrefs.C index 4f9fd856c7..b80c169221 100644 --- a/src/frontends/qt2/QPrefs.C +++ b/src/frontends/qt2/QPrefs.C @@ -73,6 +73,18 @@ QPrefs::QPrefs() } +Converters & QPrefs::converters() +{ + return controller().converters(); +} + + +Formats & QPrefs::formats() +{ + return controller().formats(); +} + + void QPrefs::build_dialog() { dialog_.reset(new QPrefsDialog(this)); @@ -287,9 +299,6 @@ void QPrefs::apply() controller().updateScreenFonts(); } - controller().setFormats(formats_); - controller().setConverters(converters_); - QPrefColorsModule * colmod(dialog_->colorsModule); unsigned int i; @@ -582,11 +591,7 @@ void QPrefs::update_contents() fontmod->screenHugeED->setText(toqstr(tostr(rc.font_sizes[LyXFont::SIZE_HUGE]))); fontmod->screenHugerED->setText(toqstr(tostr(rc.font_sizes[LyXFont::SIZE_HUGER]))); - formats_ = formats; - dialog_->updateFormats(); - converters_ = converters; - dialog_->updateConverters(); } diff --git a/src/frontends/qt2/QPrefs.h b/src/frontends/qt2/QPrefs.h index faf884df19..d3661f8afd 100644 --- a/src/frontends/qt2/QPrefs.h +++ b/src/frontends/qt2/QPrefs.h @@ -13,8 +13,6 @@ #define QPREFS_H -#include "converter.h" -#include "format.h" #include "ControlPrefs.h" #include "Qt2Base.h" @@ -22,6 +20,8 @@ #include class QPrefsDialog; +class Controllers; +class Formats; class QPrefs : public Qt2CB > @@ -42,14 +42,11 @@ private: /// build the dialog virtual void build_dialog(); + Converters & converters(); + Formats & formats(); + /// languages std::vector lang_; - - /// converters - Converters converters_; - - /// formats - Formats formats_; }; #endif // QPREFS_H diff --git a/src/frontends/qt2/QPrefsDialog.C b/src/frontends/qt2/QPrefsDialog.C index 4f20c39fbf..b187c8222c 100644 --- a/src/frontends/qt2/QPrefsDialog.C +++ b/src/frontends/qt2/QPrefsDialog.C @@ -282,8 +282,8 @@ void QPrefsDialog::updateConverters() convertmod->converterFromCO->clear(); convertmod->converterToCO->clear(); - Formats::const_iterator cit = form_->formats_.begin(); - Formats::const_iterator end = form_->formats_.end(); + Formats::const_iterator cit = form_->formats().begin(); + Formats::const_iterator end = form_->formats().end(); for (; cit != end; ++cit) { convertmod->converterFromCO->insertItem(toqstr(cit->prettyname())); convertmod->converterToCO->insertItem(toqstr(cit->prettyname())); @@ -291,8 +291,8 @@ void QPrefsDialog::updateConverters() convertmod->convertersLB->clear(); - Converters::const_iterator ccit = form_->converters_.begin(); - Converters::const_iterator cend = form_->converters_.end(); + Converters::const_iterator ccit = form_->converters().begin(); + Converters::const_iterator cend = form_->converters().end(); for (; ccit != cend; ++ccit) { string const name(ccit->From->prettyname() + " -> " + ccit->To->prettyname()); @@ -306,9 +306,9 @@ void QPrefsDialog::updateConverters() void QPrefsDialog::switch_converter(int nr) { - Converter const & c(form_->converters_.get(nr)); - convertersModule->converterFromCO->setCurrentItem(form_->formats_.getNumber(c.from)); - convertersModule->converterToCO->setCurrentItem(form_->formats_.getNumber(c.to)); + Converter const & c(form_->converters().get(nr)); + convertersModule->converterFromCO->setCurrentItem(form_->formats().getNumber(c.from)); + convertersModule->converterToCO->setCurrentItem(form_->formats().getNumber(c.to)); convertersModule->converterED->setText(toqstr(c.command)); convertersModule->converterFlagED->setText(toqstr(c.flags)); } @@ -318,13 +318,13 @@ void QPrefsDialog::switch_converter(int nr) // specify unique from/to or it doesn't appear. This is really bad UI void QPrefsDialog::new_converter() { - Format const & from(form_->formats_.get(convertersModule->converterFromCO->currentItem())); - Format const & to(form_->formats_.get(convertersModule->converterToCO->currentItem())); + Format const & from(form_->formats().get(convertersModule->converterFromCO->currentItem())); + Format const & to(form_->formats().get(convertersModule->converterToCO->currentItem())); - Converter const * old = form_->converters_.getConverter(from.name(), to.name()); - form_->converters_.add(from.name(), to.name(), "", ""); + Converter const * old = form_->converters().getConverter(from.name(), to.name()); + form_->converters().add(from.name(), to.name(), "", ""); if (!old) { - form_->converters_.updateLast(form_->formats_); + form_->converters().updateLast(form_->formats()); } updateConverters(); convertersModule->convertersLB->setCurrentItem(convertersModule->convertersLB->count() - 1); @@ -333,15 +333,15 @@ void QPrefsDialog::new_converter() void QPrefsDialog::modify_converter() { - Format const & from(form_->formats_.get(convertersModule->converterFromCO->currentItem())); - Format const & to(form_->formats_.get(convertersModule->converterToCO->currentItem())); + Format const & from(form_->formats().get(convertersModule->converterFromCO->currentItem())); + Format const & to(form_->formats().get(convertersModule->converterToCO->currentItem())); string flags(fromqstr(convertersModule->converterFlagED->text())); string name(fromqstr(convertersModule->converterED->text())); - Converter const * old = form_->converters_.getConverter(from.name(), to.name()); - form_->converters_.add(from.name(), to.name(), name, flags); + Converter const * old = form_->converters().getConverter(from.name(), to.name()); + form_->converters().add(from.name(), to.name(), name, flags); if (!old) { - form_->converters_.updateLast(form_->formats_); + form_->converters().updateLast(form_->formats()); } updateConverters(); } @@ -349,9 +349,9 @@ void QPrefsDialog::modify_converter() void QPrefsDialog::remove_converter() { - Format const & from(form_->formats_.get(convertersModule->converterFromCO->currentItem())); - Format const & to(form_->formats_.get(convertersModule->converterToCO->currentItem())); - form_->converters_.erase(from.name(), to.name()); + Format const & from(form_->formats().get(convertersModule->converterFromCO->currentItem())); + Format const & to(form_->formats().get(convertersModule->converterToCO->currentItem())); + form_->converters().erase(from.name(), to.name()); updateConverters(); } @@ -362,8 +362,8 @@ void QPrefsDialog::updateFormats() formatmod->formatsLB->clear(); - Formats::const_iterator cit = form_->formats_.begin(); - Formats::const_iterator end = form_->formats_.end(); + Formats::const_iterator cit = form_->formats().begin(); + Formats::const_iterator end = form_->formats().end(); for (; cit != end; ++cit) { formatmod->formatsLB->insertItem(toqstr(cit->prettyname())); } @@ -375,42 +375,42 @@ void QPrefsDialog::updateFormats() void QPrefsDialog::switch_format(int nr) { - Format const & f(form_->formats_.get(nr)); + Format const & f(form_->formats().get(nr)); fileformatsModule->formatED->setText(toqstr(f.name())); fileformatsModule->guiNameED->setText(toqstr(f.prettyname())); fileformatsModule->extensionED->setText(toqstr(f.extension())); fileformatsModule->shortcutED->setText(toqstr(f.shortcut())); fileformatsModule->viewerED->setText(toqstr(f.viewer())); fileformatsModule->formatRemovePB->setEnabled( - !form_->converters_.formatIsUsed(f.name())); + !form_->converters().formatIsUsed(f.name())); } void QPrefsDialog::new_format() { - form_->formats_.add(_("New")); - form_->formats_.sort(); + form_->formats().add(_("New")); + form_->formats().sort(); updateFormats(); - fileformatsModule->formatsLB->setCurrentItem(form_->formats_.getNumber(_("New"))); + fileformatsModule->formatsLB->setCurrentItem(form_->formats().getNumber(_("New"))); updateConverters(); } void QPrefsDialog::modify_format() { - Format const & oldformat(form_->formats_.get(fileformatsModule->formatsLB->currentItem())); + Format const & oldformat(form_->formats().get(fileformatsModule->formatsLB->currentItem())); string const oldpretty(oldformat.prettyname()); string const name(fromqstr(fileformatsModule->formatED->text())); - form_->formats_.erase(oldformat.name()); + form_->formats().erase(oldformat.name()); string const prettyname = fromqstr(fileformatsModule->guiNameED->text()); string const extension = fromqstr(fileformatsModule->extensionED->text()); string const shortcut = fromqstr(fileformatsModule->shortcutED->text()); string const viewer = fromqstr(fileformatsModule->viewerED->text()); - form_->formats_.add(name, extension, prettyname, shortcut); - form_->formats_.sort(); - form_->formats_.setViewer(name, viewer); + form_->formats().add(name, extension, prettyname, shortcut); + form_->formats().sort(); + form_->formats().setViewer(name, viewer); fileformatsModule->formatsLB->setUpdatesEnabled(false); updateFormats(); @@ -426,7 +426,7 @@ void QPrefsDialog::remove_format() int const nr(fileformatsModule->formatsLB->currentItem()); if (nr < 0) return; - form_->formats_.erase(form_->formats_.get(nr).name()); + form_->formats().erase(form_->formats().get(nr).name()); updateFormats(); updateConverters(); } diff --git a/src/frontends/xforms/ChangeLog b/src/frontends/xforms/ChangeLog index 4ac69a3d97..457956fe97 100644 --- a/src/frontends/xforms/ChangeLog +++ b/src/frontends/xforms/ChangeLog @@ -1,3 +1,8 @@ +2004-03-31 Angus Leeming + + * FormPreferences.[Ch]: changes due to the changed ControlPrefs + interface. + 2004-03-30 Angus Leeming * Dialogs.C (build): added document dialog. diff --git a/src/frontends/xforms/FormPreferences.C b/src/frontends/xforms/FormPreferences.C index 564629b5c4..8d3faa4fcf 100644 --- a/src/frontends/xforms/FormPreferences.C +++ b/src/frontends/xforms/FormPreferences.C @@ -24,8 +24,6 @@ #include "controllers/helper_funcs.h" // getSecond #include "buffer.h" -#include "converter.h" -#include "format.h" #include "LColor.h" #include "lyxfont.h" @@ -58,10 +56,6 @@ using std::string; namespace { -// These should probably go inside the class definition... -Formats local_formats; -Converters local_converters; - string makeFontName(string const & family, string const & foundry) { if (foundry.empty()) @@ -291,8 +285,6 @@ void FormPreferences::apply() LyXRC & rc(controller().rc()); colors_.apply(); - formats_.apply(); // Must be before converters_.apply() - converters_.apply(); inputs_misc_.apply(rc); interface_.apply(rc); language_.apply(rc); @@ -716,9 +708,15 @@ FD_preferences_converters const * FormPreferences::Converters::dialog() } -void FormPreferences::Converters::apply() const +::Converters & FormPreferences::Converters::converters() +{ + return parent_.controller().converters(); +} + + +::Formats & FormPreferences::Converters::formats() { - parent_.controller().setConverters(local_converters); + return parent_.controller().formats(); } @@ -802,20 +800,18 @@ bool FormPreferences::Converters::input(FL_OBJECT const * const ob) void FormPreferences::Converters::update() { - local_converters = converters; - local_converters.update(local_formats); UpdateBrowser(); } void FormPreferences::Converters::UpdateBrowser() { - local_converters.sort(); + converters().sort(); fl_freeze_form(dialog_->form); fl_clear_browser(dialog_->browser_all); - for (::Converters::const_iterator cit = local_converters.begin(); - cit != local_converters.end(); ++cit) { + for (::Converters::const_iterator cit = converters().begin(); + cit != converters().end(); ++cit) { string const name = cit->From->prettyname() + " -> " + cit->To->prettyname(); fl_addto_browser(dialog_->browser_all, name.c_str()); @@ -832,10 +828,10 @@ bool FormPreferences::Converters::Add() string const command = fl_get_input(dialog_->input_converter); string const flags = fl_get_input(dialog_->input_flags); - Converter const * old = local_converters.getConverter(from, to); - local_converters.add(from, to, command, flags); + Converter const * old = converters().getConverter(from, to); + converters().add(from, to, command, flags); if (!old) { - local_converters.updateLast(local_formats); + converters().updateLast(formats()); UpdateBrowser(); } setEnabled(dialog_->button_add, false); @@ -851,12 +847,12 @@ bool FormPreferences::Converters::Browser() fl_freeze_form(dialog_->form); - Converter const & c = local_converters.get(i - 1); - int j = local_formats.getNumber(c.from); + Converter const & c = converters().get(i - 1); + int j = formats().getNumber(c.from); if (j >= 0) fl_set_choice(dialog_->choice_from, j + 1); - j = local_formats.getNumber(c.to); + j = formats().getNumber(c.to); if (j >= 0) fl_set_choice(dialog_->choice_to, j + 1); @@ -880,7 +876,7 @@ bool FormPreferences::Converters::erase() string const from = GetFrom(); string const to = GetTo(); - local_converters.erase(from, to); + converters().erase(from, to); UpdateBrowser(); return true; } @@ -890,7 +886,7 @@ bool FormPreferences::Converters::Input() { string const from = GetFrom(); string const to = GetTo(); - int const sel = local_converters.getNumber(from, to); + int const sel = converters().getNumber(from, to); fl_freeze_form(dialog_->form); @@ -924,37 +920,37 @@ bool FormPreferences::Converters::Input() } -string const FormPreferences::Converters::GetFrom() const +string const FormPreferences::Converters::GetFrom() { ::Formats::FormatList::size_type const i = fl_get_choice(dialog_->choice_from); - if (i > 0 && i <= local_formats.size()) - return local_formats.get(i - 1).name(); + if (i > 0 && i <= formats().size()) + return formats().get(i - 1).name(); lyxerr << "FormPreferences::Converters::GetFrom: No choice!" << endl; return "???"; } -string const FormPreferences::Converters::GetTo() const +string const FormPreferences::Converters::GetTo() { ::Formats::FormatList::size_type const i = fl_get_choice(dialog_->choice_to); - if (i > 0 && i <= local_formats.size()) - return local_formats.get(i - 1).name(); + if (i > 0 && i <= formats().size()) + return formats().get(i - 1).name(); lyxerr << "FormPreferences::Converters::GetTo: No choice!" << endl; return "???"; } -void FormPreferences::Converters::UpdateChoices() const +void FormPreferences::Converters::UpdateChoices() { string choice; - for (::Formats::const_iterator cit = local_formats.begin(); - cit != local_formats.end(); ++cit) { + for (::Formats::const_iterator cit = formats().begin(); + cit != formats().end(); ++cit) { if (!choice.empty()) choice += " | "; else @@ -982,9 +978,15 @@ FD_preferences_formats const * FormPreferences::Formats::dialog() } -void FormPreferences::Formats::apply() const +::Converters & FormPreferences::Formats::converters() +{ + return parent_.controller().converters(); +} + + +::Formats & FormPreferences::Formats::formats() { - parent_.controller().setFormats(local_formats); + return parent_.controller().formats(); } @@ -1075,20 +1077,19 @@ bool FormPreferences::Formats::input(FL_OBJECT const * const ob) void FormPreferences::Formats::update() { - local_formats = formats; UpdateBrowser(); } void FormPreferences::Formats::UpdateBrowser() { - local_formats.sort(); + formats().sort(); fl_freeze_form(dialog_->form); fl_deselect_browser(dialog_->browser_all); fl_clear_browser(dialog_->browser_all); - for (::Formats::const_iterator cit = local_formats.begin(); - cit != local_formats.end(); ++cit) + for (::Formats::const_iterator cit = formats().begin(); + cit != formats().end(); ++cit) fl_addto_browser(dialog_->browser_all, cit->prettyname().c_str()); @@ -1097,7 +1098,7 @@ void FormPreferences::Formats::UpdateBrowser() // Mustn't forget to update the Formats available to the converters_ parent_.converters_.UpdateChoices(); - local_converters.update(local_formats); + converters().update(formats()); } @@ -1109,10 +1110,10 @@ bool FormPreferences::Formats::Add() string const shortcut = fl_get_input(dialog_->input_shrtcut); string const viewer = fl_get_input(dialog_->input_viewer); - Format const * old = local_formats.getFormat(name); + Format const * old = formats().getFormat(name); string const old_prettyname = old ? old->prettyname() : string(); - local_formats.add(name, extension, prettyname, shortcut); - local_formats.setViewer(name, viewer); + formats().add(name, extension, prettyname, shortcut); + formats().setViewer(name, viewer); if (!old || prettyname != old_prettyname) { UpdateBrowser(); if (old) @@ -1132,7 +1133,7 @@ bool FormPreferences::Formats::Browser() fl_freeze_form(dialog_->form); - Format const & f = local_formats.get(i - 1); + Format const & f = formats().get(i - 1); fl_set_input(dialog_->input_format, f.name().c_str()); fl_set_input(dialog_->input_gui_name, f.prettyname().c_str()); @@ -1157,14 +1158,14 @@ bool FormPreferences::Formats::erase() { string const name = fl_get_input(dialog_->input_format); - if (local_converters.formatIsUsed(name)) { + if (converters().formatIsUsed(name)) { parent_.postWarning(_("Cannot remove a Format used by a Converter. " "Remove the converter first.")); setEnabled(dialog_->button_delete, false); return false; } - local_formats.erase(name); + formats().erase(name); UpdateBrowser(); return true; } @@ -1173,7 +1174,7 @@ bool FormPreferences::Formats::erase() bool FormPreferences::Formats::Input() { string const name = fl_get_input(dialog_->input_format); - int const sel = local_formats.getNumber(name); + int const sel = formats().getNumber(name); fl_freeze_form(dialog_->form); if (sel < 0) { diff --git a/src/frontends/xforms/FormPreferences.h b/src/frontends/xforms/FormPreferences.h index 689ac758a6..6503eec2c6 100644 --- a/src/frontends/xforms/FormPreferences.h +++ b/src/frontends/xforms/FormPreferences.h @@ -20,6 +20,8 @@ #include class ControlPrefs; +class Converters; +class Formats; class Dialogs; class FormColorpicker; @@ -142,8 +144,6 @@ private: /// FD_preferences_converters const * dialog(); /// - void apply() const; - /// void build(); /// std::string const feedback(FL_OBJECT const * const) const; @@ -154,7 +154,7 @@ private: /// void UpdateBrowser(); /// - void UpdateChoices() const; + void UpdateChoices(); private: /// @@ -166,9 +166,12 @@ private: /// bool Input(); /// - std::string const GetFrom() const; + std::string const GetFrom(); + /// + std::string const GetTo(); /// - std::string const GetTo() const; + ::Converters & converters(); + ::Formats & formats(); /// FormPreferences & parent_; @@ -186,8 +189,6 @@ private: /// FD_preferences_formats const * dialog(); /// - void apply() const; - /// void build(); /// std::string const feedback(FL_OBJECT const * const) const; @@ -207,6 +208,9 @@ private: bool erase(); /// bool Input(); + // + ::Converters & converters(); + ::Formats & formats(); /// FormPreferences & parent_; diff --git a/src/lfuns.h b/src/lfuns.h index 026c35f09e..63360a31fb 100644 --- a/src/lfuns.h +++ b/src/lfuns.h @@ -347,6 +347,7 @@ enum kb_action { LFUN_SAVE_AS_DEFAULT, LFUN_BUFFERPARAMS_APPLY, // 265 + LFUN_LYXRC_APPLY, LFUN_LASTACTION // end of the table }; diff --git a/src/lyxfunc.C b/src/lyxfunc.C index a2d72087c6..ab209e97d0 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -506,6 +506,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const case LFUN_TEXTCLASS_LOAD: case LFUN_SAVE_AS_DEFAULT: case LFUN_BUFFERPARAMS_APPLY: + case LFUN_LYXRC_APPLY: // these are handled in our dispatch() break; @@ -1367,6 +1368,18 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) loadTextclass(argument); break; + case LFUN_LYXRC_APPLY: { + istringstream ss(argument); + bool const success = lyxrc.read(ss) == 0; + + if (!success) { + lyxerr << "Warning in LFUN_LYXRC_APPLY!\n" + << "Unable to read lyxrc data" + << endl; + } + break; + } + default: { DispatchResult res = view()->cursor().dispatch(cmd); if (!res.dispatched()); diff --git a/src/lyxrc.C b/src/lyxrc.C index eb3b2fe0b5..927eb0faae 100644 --- a/src/lyxrc.C +++ b/src/lyxrc.C @@ -303,6 +303,29 @@ int LyXRC::read(string const & filename) lyxerr[Debug::LYXRC] << "Reading '" << filename << "'..." << endl; + return read(lexrc); +} + + +int LyXRC::read(std::istream & is) +{ + LyXLex lexrc(lyxrcTags, lyxrcCount); + if (lyxerr.debugging(Debug::PARSER)) + lexrc.printTable(lyxerr); + + lexrc.setStream(is); + if (!lexrc.isOK()) return -2; + + lyxerr[Debug::LYXRC] << "Reading istream..." << endl; + + return read(lexrc); +} + + +int LyXRC::read(LyXLex & lexrc) +{ + if (!lexrc.isOK()) return -2; + while (lexrc.isOK()) { // By using two switches we take advantage of the compiler // telling us if we have missed a LyXRCTags element in @@ -569,7 +592,7 @@ int LyXRC::read(string const & filename) dpi = lexrc.getInteger(); } break; - +1G case RC_SCREEN_ZOOM: if (lexrc.next()) { zoom = lexrc.getInteger(); @@ -1052,20 +1075,20 @@ void LyXRC::write(string const & filename) const { ofstream ofs(filename.c_str()); if (ofs) - output(ofs); + write(ofs); } void LyXRC::print() const { if (lyxerr.debugging()) - output(lyxerr); + write(lyxerr); else - output(cout); + write(cout); } -void LyXRC::output(ostream & os) const +void LyXRC::write(ostream & os) const { os << "### This file is part of\n" << "### ========================================================\n" diff --git a/src/lyxrc.h b/src/lyxrc.h index 068549f7e6..9390133dae 100644 --- a/src/lyxrc.h +++ b/src/lyxrc.h @@ -21,8 +21,10 @@ #include "paper.h" #include "graphics/GraphicsTypes.h" +#include #include +class LyXLex; /// This contains the runtime configuration of LyX class LyXRC //: public noncopyable { @@ -139,12 +141,18 @@ enum LyXRCTags { void setDefaults(); /// int read(std::string const & filename); + /// + int read(std::istream &); +private: + /// + int read(LyXLex &); +public: /// void write(std::string const & filename) const; /// - void print() const; + void write(std::ostream & os) const; /// - void output(std::ostream & os) const; + void print() const; /// static std::string const getDescription(LyXRCTags); /// -- 2.39.2