X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fxforms%2FFormPreferences.h;h=773050535fccf2da3e56c476d06cf755a3826f79;hb=c265d16ed06149b478c2d2c9b9b8e69cdb1bcf3d;hp=f855cf0d80802a3a16247414ee404a97f133bb0e;hpb=7ec7c9da44662529e8a0ad4d60836df43a059ecd;p=lyx.git diff --git a/src/frontends/xforms/FormPreferences.h b/src/frontends/xforms/FormPreferences.h index f855cf0d80..773050535f 100644 --- a/src/frontends/xforms/FormPreferences.h +++ b/src/frontends/xforms/FormPreferences.h @@ -1,84 +1,69 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2000 The LyX Team. +/** + * \file FormPreferences.h + * Copyright 1995-2002 the LyX Team + * Copyright 1999-2001 Allan Rae + * Read the file COPYING * - * This file copyright 1999-2000 - * Allan Rae - *======================================================*/ -/* FormPreferences.h - * FormPreferences Interface Class + * \author Allan Rae, rae@lyx.org + * \author Angus Leeming */ #ifndef FORMPREFERENCES_H #define FORMPREFERENCES_H -#include "FormBase.h" - -#ifdef __GNUG_ +#ifdef __GNUG__ #pragma interface #endif -class LyXView; -class Dialogs; -struct FD_form_colours; -struct FD_form_converters; -struct FD_form_formats; -struct FD_form_inputs_misc; -struct FD_form_interface; -struct FD_form_language; -struct FD_form_lnf_misc; -struct FD_form_outer_tab; -struct FD_form_outputs_misc; -struct FD_form_paths; -struct FD_form_preferences; -struct FD_form_printer; -struct FD_form_screen_fonts; -struct FD_form_spellchecker; +#include "FormBaseDeprecated.h" +#include "Color.h" // NamedColor +#include "xforms_helpers.h" // XformColor + +#include + +#include FORMS_H_LOCATION +#include // pair + class Combox; -class Format; +class Dialogs; +class LyXView; +class RGBColor; +struct FD_preferences; +struct FD_preferences_colors; +struct FD_preferences_converters; +struct FD_preferences_formats; +struct FD_preferences_inputs_misc; +struct FD_preferences_interface; +struct FD_preferences_language; +struct FD_preferences_lnf_misc; +struct FD_preferences_inner_tab; +struct FD_preferences_outputs_misc; +struct FD_preferences_paths; +struct FD_preferences_printer; +struct FD_preferences_screen_fonts; +struct FD_preferences_spelloptions; + /** This class provides an XForms implementation of the FormPreferences Dialog. The preferences dialog allows users to set/save their preferences. */ class FormPreferences : public FormBaseBI { public: - /// #FormPreferences x(LyXFunc ..., Dialogs ...);# - FormPreferences(LyXView *, Dialogs *); /// - ~FormPreferences(); - /// - static void ComboLanguageCB(int, void *, Combox *); - /// - static void FeedbackCB(FL_OBJECT *, long); - /// - void feedbackPost(FL_OBJECT *, int); + FormPreferences(LyXView &, Dialogs &); private: - /// helper struct for Colours - struct RGB { - int r; - int g; - int b; - RGB() : r(0), g(0), b(0) {} - RGB(int red, int green, int blue) : r(red), g(green), b(blue) {} - }; - /// - friend bool operator==(RGB const &, RGB const &); - /// - friend bool operator!=(RGB const &, RGB const &); - /// - typedef std::pair X11Colour; - + /// Pointer to the actual instantiation of the ButtonController. + virtual xformsBC & bc(); + /** Redraw the form (on receipt of a Signal indicating, for example, + that the xforms colours have been re-mapped). */ + virtual void redraw(); /// Update the dialog. virtual void update(); - /// + /// Hide the dialog. virtual void hide(); - /// OK from dialog + /// OK (Save) from dialog virtual void ok(); /// Apply from dialog virtual void apply(); @@ -86,268 +71,466 @@ private: virtual bool input(FL_OBJECT *, long); /// Build the dialog virtual void build(); + /// Pointer to the actual instantiation of the xforms form. + virtual FL_FORM * form() const; /// control which feedback message is output - void feedback( FL_OBJECT * ); + string const getFeedback(FL_OBJECT *); /// - virtual FL_FORM * form() const; + void browse(FL_OBJECT * input, + string const & title, string const & pattern, + std::pair const & dir1= std::make_pair(string(),string()), + std::pair const & dir2 = std::make_pair(string(),string())); - /** Folder specific apply functions. - */ - - /// - void applyColours() const; - /// - void applyConverters() const; - /// - void applyFormats() const; - /// - void applyInputsMisc() const; - /// - void applyInterface() const; - /// - void applyLanguage(); // not const because calls updateLanguage! - /// - void applyLnFmisc() const; - /// - void applyOutputsMisc() const; - /// - void applyPaths(); // not const because calls updatePaths! - /// - void applyPrinter() const; - /// - void applyScreenFonts() const; - /// - void applySpellChecker(); // not const because calls updateSpellChecker! + /// Real GUI implementation. + boost::scoped_ptr dialog_; + /// Converters tabfolder + boost::scoped_ptr converters_tab_; + /// reLyX and other import/input stuff + boost::scoped_ptr inputs_tab_; + /// HCI configuration + boost::scoped_ptr look_n_feel_tab_; + /// Outputs tabfolder + boost::scoped_ptr outputs_tab_; + /// Spellchecker, language stuff, etc + boost::scoped_ptr lang_opts_tab_; - /** Folder specific build functions. + /** Each tab folder is encapsulated in its own class. */ - - /// - void buildColours(); - /// - void buildConverters(); - /// - void buildFormats(); - /// - void buildInputsMisc(); - /// - void buildInterface(); - /// - void buildLanguage(); - /// - void buildLnFmisc(); - /// - void buildOutputsMisc(); - /// - void buildPaths(); - /// - void buildPrinter(); - /// - void buildScreenFonts(); - /// - void buildSpellchecker(); - /** Folder specific feedback functions. - */ - - /// - string const feedbackColours(FL_OBJECT const * const) const; - /// - string const feedbackConverters(FL_OBJECT const * const) const; - /// - string const feedbackFormats( FL_OBJECT const * const ) const; - /// - string const feedbackInputsMisc(FL_OBJECT const * const) const; - /// - string const feedbackInterface(FL_OBJECT const * const) const; - /// - string const feedbackLanguage(FL_OBJECT const * const) const; - /// - string const feedbackLnFmisc(FL_OBJECT const * const) const; - /// - string const feedbackOutputsMisc(FL_OBJECT const * const) const; - /// - string const feedbackPaths(FL_OBJECT const * const) const; - /// - string const feedbackPrinter(FL_OBJECT const * const) const; - /// - string const feedbackScreenFonts(FL_OBJECT const * const) const; - /// - string const feedbackSpellChecker(FL_OBJECT const * const) const; + class Colors { + public: + /// + enum GuiColors { + GUI_COLOR_CHOICE = FL_FREE_COL14, + GUI_COLOR_HUE_DIAL = FL_FREE_COL15, + GUI_COLOR_CURSOR = FL_FREE_COL16 + }; + /// + Colors(FormPreferences & p); + /// + FD_preferences_colors const * dialog(); + /// + void apply(); // not const as modifies modifiedXformsPrefs. + /// + void build(); + /// + string const feedback(FL_OBJECT const * const) const; + /// + void input(FL_OBJECT const * const); + /// + void update() { LoadBrowserLyX(); } - /** Folder specific input functions. Not all folders require one. - */ - - /// - bool inputColours(FL_OBJECT const * const); - /// - bool inputFormats( FL_OBJECT const * const ); - /// - bool inputLanguage(FL_OBJECT const * const); - /// - bool inputPaths(FL_OBJECT const * const); - /// - bool inputScreenFonts(); - /// - bool inputSpellChecker(FL_OBJECT const * const); + /// Flag whether Xforms colors have changed since last file save + bool modifiedXformsPrefs; - /** Folder specific update functions. - */ - + private: + /// + void AdjustVal(int, int, double) const; + /// + void InputBrowserLyX() const; + /// + void InputHSV(); + /// + void InputRGB(); + /// + void LoadBrowserLyX(); + /// + void Modify(); + /// + void SwitchColorSpace() const; + /// + string const X11hexname(RGBColor const &) const; + + /// + FormPreferences & parent_; + /// + boost::scoped_ptr dialog_; + + /// A vector of LyX LColor GUI name and associated RGB color. + std::vector lyxColorDB; + /// A vector of xforms color ID, RGB colors and associated name. + std::vector xformsColorDB; + }; /// - void updateColours(); + friend class Colors; + /// - void updateConverters(); + class Converters { + public: + /// + Converters(FormPreferences & p); + /// + FD_preferences_converters const * dialog(); + /// + void apply() const; + /// + void build(); + /// + string const feedback(FL_OBJECT const * const) const; + /// + bool input(FL_OBJECT const * const); + /// + void update(); + /// + void UpdateBrowser(); + /// + void UpdateChoices() const; + + private: + /// + bool Add(); + /// + bool Browser(); + /// + bool erase(); + /// + bool Input(); + /// + string const GetFrom() const; + /// + string const GetTo() const; + + /// + FormPreferences & parent_; + /// + boost::scoped_ptr dialog_; + }; /// - void updateFormats(); + friend class Converters; + /// - void updateInputsMisc(); + class Formats { + public: + /// + Formats(FormPreferences & p); + /// + FD_preferences_formats const * dialog(); + /// + void apply() const; + /// + void build(); + /// + string const feedback(FL_OBJECT const * const) const; + /// + bool input(FL_OBJECT const * const); + /// + void update(); + + private: + /// + bool Add(); + /// + bool Browser(); + /// + void UpdateBrowser(); + /// + bool erase(); + /// + bool Input(); + + /// + FormPreferences & parent_; + /// + boost::scoped_ptr dialog_; + }; /// - void updateInterface(); + friend class Formats; + /// - void updateLanguage(); + class InputsMisc { + public: + /// + InputsMisc(FormPreferences & p); + /// + FD_preferences_inputs_misc const * dialog(); + /// + void apply() const; + /// + void build(); + /// + string const feedback(FL_OBJECT const * const) const; + /// + void update(); + + private: + /// + FormPreferences & parent_; + /// + boost::scoped_ptr dialog_; + }; /// - void updateLnFmisc(); + friend class InputsMisc; + /// - void updateOutputsMisc(); + class Interface { + public: + /// + Interface(FormPreferences & p); + /// + FD_preferences_interface const * dialog(); + /// + void apply() const; + /// + void build(); + /// + string const feedback(FL_OBJECT const * const) const; + /// + bool input(FL_OBJECT const * const); + /// + void update(); + + private: + /// + FormPreferences & parent_; + /// + boost::scoped_ptr dialog_; + }; /// - void updatePaths(); + friend class Interface; + /// - void updatePrinter(); + class Language { + public: + /// + Language(FormPreferences & p); + /// + FD_preferences_language const * dialog(); + /// + void apply(); // not const because calls update() + /// + void build(); + /// + string const feedback(FL_OBJECT const * const) const; + /// + bool input(FL_OBJECT const * const); + /// + void update(); + /// + static void ComboCB(int, void *, Combox *); + + private: + /// + FormPreferences & parent_; + /// + boost::scoped_ptr dialog_; + /// + boost::scoped_ptr combo_default_lang; + /// + std::vector lang_; + }; /// - void updateScreenFonts(); + friend class Language; + /// - void updateSpellChecker(); + class LnFmisc { + public: + /// + LnFmisc(FormPreferences & p); + /// + FD_preferences_lnf_misc const * dialog(); + /// + void apply() const; + /// + void build(); + /// + string const feedback(FL_OBJECT const * const) const; + /// + void update(); - /** Some helper functions for specific folders. - */ - + private: + /// + FormPreferences & parent_; + /// + boost::scoped_ptr dialog_; + }; /// - bool ColoursLoadBrowser( string const & ); + friend class LnFmisc; + /// - int ColoursSearchEntry(RGB const & ) const; + class OutputsMisc { + public: + /// + OutputsMisc(FormPreferences & p); + /// + FD_preferences_outputs_misc const * dialog(); + /// + void apply() const; + /// + void build(); + /// + string const feedback(FL_OBJECT const * const) const; + /// + void update(); + + private: + /// + FormPreferences & parent_; + /// + boost::scoped_ptr dialog_; + }; /// - void ColoursUpdateBrowser( int ); + friend class OutputsMisc; + /// - void ColoursUpdateRGB(); + class Paths { + public: + /// + Paths(FormPreferences & p); + /// + FD_preferences_paths const * dialog(); + /// + void apply(); + /// + void build(); + /// + string const feedback(FL_OBJECT const * const) const; + /// + bool input(FL_OBJECT const * const); + /// + void update(); + + private: + /// + FormPreferences & parent_; + /// + boost::scoped_ptr dialog_; + }; /// - bool FormatsInputAdd(); + friend class Paths; + /// - bool FormatsInputBrowser(); + class Printer { + public: + /// + Printer(FormPreferences & p); + /// + FD_preferences_printer const * dialog(); + /// + void apply() const; + /// + void build(); + /// + string const feedback(FL_OBJECT const * const) const; + /// + void update(); + + private: + /// + FormPreferences & parent_; + /// + boost::scoped_ptr dialog_; + }; /// - bool FormatsInputDelete(); + friend class Printer; + /// - bool FormatsInputInput(); + class ScreenFonts { + public: + /// + ScreenFonts(FormPreferences & p); + /// + FD_preferences_screen_fonts const * dialog(); + /// + void apply() const; + /// + void build(); + /// + string const feedback(FL_OBJECT const * const) const; + /// + bool input(); + /// + void update(); + private: + /// + FormPreferences & parent_; + /// + boost::scoped_ptr dialog_; + }; /// - bool WriteableDir( string const & ) const; + friend class ScreenFonts; + /// - bool ReadableDir( string const & ) const; + class SpellOptions { + public: + /// + SpellOptions(FormPreferences & p); + /// + FD_preferences_spelloptions const * dialog(); + /// + void apply(); // not const because calls update()! + /// + void build(); + /// + string const feedback(FL_OBJECT const * const) const; + /// + bool input(FL_OBJECT const * const); + /// + void update(); + + private: + /// + FormPreferences & parent_; + /// + boost::scoped_ptr dialog_; + }; /// - bool WriteableFile( string const &, string const & = string() ) const; + friend class SpellOptions; - /// The timer post handler. - void setPostHandler( FL_OBJECT * ) const; + /** The tab folders. + */ - /// Type definitions from the fdesign produced header file. - FD_form_preferences * build_preferences(); /// - FD_form_outer_tab * build_outer_tab(); + Colors colors_; /// - FD_form_colours * build_colours(); + Converters converters_; /// - FD_form_converters * build_converters(); + InputsMisc inputs_misc_; /// - FD_form_formats * build_formats(); + Formats formats_; /// - FD_form_inputs_misc * build_inputs_misc(); + Interface interface_; /// - FD_form_interface * build_interface(); + Language language_; /// - FD_form_language * build_language(); + LnFmisc lnf_misc_; /// - FD_form_lnf_misc * build_lnf_misc(); + OutputsMisc outputs_misc_; /// - FD_form_outputs_misc * build_outputs_misc(); + Paths paths_; /// - FD_form_paths * build_paths(); + Printer printer_; /// - FD_form_printer * build_printer(); + ScreenFonts screen_fonts_; /// - FD_form_screen_fonts * build_screen_fonts(); - /// - FD_form_spellchecker * build_spellchecker(); + SpellOptions spelloptions_; - /// Real GUI implementation. - FD_form_preferences * dialog_; - /// Converters tabfolder - FD_form_outer_tab * converters_tab_; - /// reLyX and other import/input stuff - FD_form_outer_tab * inputs_tab_; - /// HCI configuration - FD_form_outer_tab * look_n_feel_tab_; - /// Outputs tabfolder - FD_form_outer_tab * outputs_tab_; - /// Spellchecker, language stuff, etc - FD_form_outer_tab * usage_tab_; - /// - FD_form_colours * colours_; - /// - FD_form_converters * converters_; - /// - FD_form_formats * formats_; + /** A couple of helper structs to enable colors to be sorted by name + and by color */ /// - FD_form_inputs_misc * inputs_misc_; - /// - FD_form_interface * interface_; - /// - FD_form_language * language_; - /// - FD_form_lnf_misc * lnf_misc_; - /// - FD_form_outputs_misc * outputs_misc_; - /// - FD_form_paths * paths_; - /// - FD_form_printer * printer_; - /// - FD_form_screen_fonts * screen_fonts_; - /// - FD_form_spellchecker * spellchecker_; - /// - Combox * combo_default_lang; - /// - Combox * combo_kbmap_1; + struct SortColorsByName { + /// + int operator()(NamedColor const & a, NamedColor const & b) const + { return (a.getname() < b.getname()); } + }; /// - Combox * combo_kbmap_2; - /// - FL_OBJECT * feedbackObj; - - /// A vector of Formats, to be manipulated in the Format browser. - std::vector formats_vec; - /// A vector of RGB colours and associated name. - static std::vector colourDB; - /** A collection of kmap files. - First entry is the file name, full path. - Second entry is the shorthand, as appears in the fl_choice. - Eg, system_lyxdir/kbd/american2.kmap, american2 - */ - static std::pair, std::vector > dirlist; + struct SortColorsByColor { + /// + SortColorsByColor(RGBColor c) : col(c) {} + /// + int operator()(RGBColor const &, RGBColor const &) const; + /// + RGBColor col; + }; + /// The ButtonController + ButtonController bc_; }; -inline -bool operator==(FormPreferences::RGB const & c1, - FormPreferences::RGB const & c2) -{ - return (c1.r == c2.r && c1.g == c2.g && c1.b == c2.b); -} - inline -bool operator!=(FormPreferences::RGB const & c1, - FormPreferences::RGB const & c2) +xformsBC & FormPreferences::bc() { - return !(c1 == c2); + return bc_; } #endif