]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiPrefs.h
Complete the removal of the embedding stuff. Maybe. It's hard to be sure we got every...
[lyx.git] / src / frontends / qt4 / GuiPrefs.h
index cdb41155c88a5502f915a581208a8447db6585ff..afca6d4b421dc596a3e819086f7b9839464b46c2 100644 (file)
@@ -5,42 +5,53 @@
  * Licence details can be found in the file COPYING.
  *
  * \author John Levon
+ * \author Bo Peng
+ * \author Edwin Leuven
  *
  * Full author contact details are available in file CREDITS.
  */
 
-#ifndef QPREFS_H
-#define QPREFS_H
+#ifndef GUIPREFS_H
+#define GUIPREFS_H
 
-#include "GuiDialogView.h"
+#include "GuiDialog.h"
 
-#include "Color.h"
+#include "ColorCode.h"
+#include "Converter.h"
+#include "Format.h"
+#include "FuncCode.h"
+#include "KeyMap.h"
 #include "LyXRC.h"
+#include "Mover.h"
 
 #include "ui_PrefsUi.h"
 
-#include <vector>
-
-#include <QDialog>
-#include <QCloseEvent>
-
 #include "ui_PrefPlaintextUi.h"
 #include "ui_PrefDateUi.h"
-#include "ui_PrefKeyboardUi.h"
+#include "ui_PrefInputUi.h"
 #include "ui_PrefLatexUi.h"
 #include "ui_PrefScreenFontsUi.h"
+#include "ui_PrefCompletionUi.h"
 #include "ui_PrefColorsUi.h"
-#include "ui_PrefCygwinPathUi.h"
 #include "ui_PrefDisplayUi.h"
+#include "ui_PrefEditUi.h"
 #include "ui_PrefPathsUi.h"
+#include "ui_PrefShortcutsUi.h"
 #include "ui_PrefSpellcheckerUi.h"
 #include "ui_PrefConvertersUi.h"
-#include "ui_PrefCopiersUi.h"
 #include "ui_PrefFileformatsUi.h"
 #include "ui_PrefLanguageUi.h"
 #include "ui_PrefPrinterUi.h"
 #include "ui_PrefUi.h"
 #include "ui_PrefIdentityUi.h"
+#include "ui_ShortcutUi.h"
+
+#include <QDialog>
+#include <QValidator>
+
+#include <string>
+#include <vector>
+
 
 namespace lyx {
 
@@ -50,32 +61,34 @@ class Movers;
 
 namespace frontend {
 
-class GuiPrefs;
+class GuiPreferences;
 
 class PrefModule : public QWidget
 {
        Q_OBJECT
 public:
-       PrefModule(docstring const & t,
-                       GuiPrefs * form = 0, QWidget * parent = 0)
-               : QWidget(parent), title_(t), form_(form)
+       PrefModule(QString const & cat, QString const & t,
+                       GuiPreferences * form = 0, QWidget * parent = 0)
+               : QWidget(parent), category_(cat), title_(t), form_(form)
        {}
 
        virtual void apply(LyXRC & rc) const = 0;
        virtual void update(LyXRC const & rc) = 0;
 
-       docstring const & title() const { return title_; }
+       QString const & category() const { return category_; }
+       QString const & title() const { return title_; }
 
 protected:
-       docstring title_;
-       GuiPrefs * form_;
+       QString category_;
+       QString title_;
+       GuiPreferences * form_;
 
 Q_SIGNALS:
        void changed();
 };
 
 
-class PrefPlaintext :  public PrefModule, public Ui::PrefPlaintextUi
+class PrefPlaintext : public PrefModule, public Ui::PrefPlaintextUi
 {
        Q_OBJECT
 public:
@@ -86,7 +99,7 @@ public:
 };
 
 
-class PrefDate :  public PrefModule, public Ui::PrefDateUi
+class PrefDate : public PrefModule, public Ui::PrefDateUi
 {
        Q_OBJECT
 public:
@@ -97,11 +110,11 @@ public:
 };
 
 
-class PrefKeyboard :  public PrefModule, public Ui::PrefKeyboardUi
+class PrefInput : public PrefModule, public Ui::PrefInputUi
 {
        Q_OBJECT
 public:
-       PrefKeyboard(GuiPrefs * form, QWidget * parent = 0);
+       PrefInput(GuiPreferences * form, QWidget * parent = 0);
 
        virtual void apply(LyXRC & rc) const;
        virtual void update(LyXRC const & rc);
@@ -116,22 +129,33 @@ private:
 };
 
 
-class PrefLatex :  public PrefModule, public Ui::PrefLatexUi
+class PrefCompletion : public PrefModule, public Ui::PrefCompletionUi
 {
        Q_OBJECT
 public:
-       PrefLatex(GuiPrefs * form, QWidget * parent = 0);
+       PrefCompletion(GuiPreferences * form, QWidget * parent = 0);
 
        virtual void apply(LyXRC & rc) const;
        virtual void update(LyXRC const & rc);
 };
 
 
-class PrefScreenFonts :  public PrefModule, public Ui::PrefScreenFontsUi
+class PrefLatex : public PrefModule, public Ui::PrefLatexUi
 {
        Q_OBJECT
 public:
-       PrefScreenFonts(GuiPrefs * form, QWidget * parent = 0);
+       PrefLatex(GuiPreferences * form, QWidget * parent = 0);
+
+       virtual void apply(LyXRC & rc) const;
+       virtual void update(LyXRC const & rc);
+};
+
+
+class PrefScreenFonts : public PrefModule, public Ui::PrefScreenFontsUi
+{
+       Q_OBJECT
+public:
+       PrefScreenFonts(GuiPreferences * form, QWidget * parent = 0);
 
        virtual void apply(LyXRC & rc) const;
        virtual void update(LyXRC const & rc);
@@ -143,11 +167,11 @@ private Q_SLOTS:
 };
 
 
-class PrefColors :  public PrefModule, public Ui::PrefColorsUi
+class PrefColors : public PrefModule, public Ui::PrefColorsUi
 {
        Q_OBJECT
 public:
-       PrefColors(GuiPrefs * form, QWidget * parent = 0);
+       PrefColors(GuiPreferences * form, QWidget * parent = 0);
 
        void apply(LyXRC & rc) const;
        void update(LyXRC const & rc);
@@ -157,7 +181,7 @@ private Q_SLOTS:
        void change_lyxObjects_selection();
 
 private:
-       std::vector<Color_color> lcolors_;
+       std::vector<ColorCode> lcolors_;
        // FIXME the use of mutable here is required due to the
        // fact that initialization is not done in the controller
        // but in the constructor.
@@ -167,18 +191,7 @@ private:
 };
 
 
-class PrefCygwinPath :  public PrefModule, public Ui::PrefCygwinPathUi
-{
-       Q_OBJECT
-public:
-       PrefCygwinPath(QWidget * parent = 0);
-
-       void apply(LyXRC & rc) const;
-       void update(LyXRC const & rc);
-};
-
-
-class PrefDisplay :  public PrefModule, public Ui::PrefDisplayUi
+class PrefDisplay : public PrefModule, public Ui::PrefDisplayUi
 {
        Q_OBJECT
 public:
@@ -189,16 +202,17 @@ public:
 };
 
 
-class PrefPaths :  public PrefModule, public Ui::PrefPathsUi
+class PrefPaths : public PrefModule, public Ui::PrefPathsUi
 {
        Q_OBJECT
 public:
-       PrefPaths(GuiPrefs * form, QWidget * parent = 0);
+       PrefPaths(GuiPreferences * form, QWidget * parent = 0);
 
        void apply(LyXRC & rc) const;
        void update(LyXRC const & rc);
 
 private Q_SLOTS:
+       void select_exampledir();
        void select_templatedir();
        void select_tempdir();
        void select_backupdir();
@@ -208,11 +222,11 @@ private Q_SLOTS:
 };
 
 
-class PrefSpellchecker :  public PrefModule, public Ui::PrefSpellcheckerUi
+class PrefSpellchecker : public PrefModule, public Ui::PrefSpellcheckerUi
 {
        Q_OBJECT
 public:
-       PrefSpellchecker(GuiPrefs * form, QWidget * parent = 0);
+       PrefSpellchecker(GuiPreferences * form, QWidget * parent = 0);
 
        void apply(LyXRC & rc) const;
        void update(LyXRC const & rc);
@@ -222,11 +236,11 @@ private Q_SLOTS:
 };
 
 
-class PrefConverters :  public PrefModule, public Ui::PrefConvertersUi
+class PrefConverters : public PrefModule, public Ui::PrefConvertersUi
 {
        Q_OBJECT
 public:
-       PrefConverters(GuiPrefs * form, QWidget * parent = 0);
+       PrefConverters(GuiPreferences * form, QWidget * parent = 0);
 
        void apply(LyXRC & rc) const;
        void update(LyXRC const & rc);
@@ -246,55 +260,70 @@ private:
 };
 
 
-class PrefCopiers :  public PrefModule, public Ui::PrefCopiersUi
+class FormatValidator : public QValidator
 {
-       Q_OBJECT
 public:
-       PrefCopiers(GuiPrefs * form, QWidget * parent = 0);
-
-       void apply(LyXRC & rc) const;
-       void update(LyXRC const & rc);
+       FormatValidator(QWidget *, Formats const & f);
+       void fixup(QString & input) const;
+       QValidator::State validate(QString & input, int & pos) const;
+private:
+       virtual std::string str(Formats::const_iterator it) const = 0;
+       int nr() const;
+       Formats const & formats_;
+};
 
-       void update();
 
-private Q_SLOTS:
-       void switch_copierLB(int nr);
-       void switch_copierCO(int nr);
-       void copiers_changed();
-       void new_copier();
-       void modify_copier();
-       void remove_copier();
+class FormatNameValidator : public FormatValidator
+{
+public:
+       FormatNameValidator(QWidget *, Formats const & f);
+private:
+       std::string str(Formats::const_iterator it) const;
+};
 
+class FormatPrettynameValidator : public FormatValidator
+{
+public:
+       FormatPrettynameValidator(QWidget *, Formats const & f);
 private:
-       void updateButtons();
+       std::string str(Formats::const_iterator it) const;
 };
 
 
-class PrefFileformats :  public PrefModule, public Ui::PrefFileformatsUi
+class PrefFileformats : public PrefModule, public Ui::PrefFileformatsUi
 {
        Q_OBJECT
 public:
-       PrefFileformats(GuiPrefs * form, QWidget * parent = 0);
+       PrefFileformats(GuiPreferences * form, QWidget * parent = 0);
 
        void apply(LyXRC & rc) const;
        void update(LyXRC const & rc);
+       void updateView();
 
-       void update();
 Q_SIGNALS:
        void formatsChanged();
-private:
-       void updateButtons();
 
 private Q_SLOTS:
-       void switch_format(int);
-       void fileformat_changed();
-       void new_format();
-       void modify_format();
-       void remove_format();
+       void on_copierED_textEdited(const QString & s);
+       void on_extensionED_textEdited(const QString &);
+       void on_viewerED_textEdited(const QString &);
+       void on_editorED_textEdited(const QString &);
+       void on_shortcutED_textEdited(const QString &);
+       void on_formatED_editingFinished();
+       void on_formatED_textChanged(const QString &);
+       void on_formatsCB_currentIndexChanged(int);
+       void on_formatsCB_editTextChanged(const QString &);
+       void on_formatNewPB_clicked();
+       void on_formatRemovePB_clicked();
+       void setFlags();
+       void updatePrettyname();
+
+private:
+       Format & currentFormat();
 };
 
 
-class PrefLanguage :  public PrefModule, public Ui::PrefLanguageUi
+class PrefLanguage : public PrefModule, public Ui::PrefLanguageUi
 {
        Q_OBJECT
 public:
@@ -304,11 +333,11 @@ public:
        void update(LyXRC const & rc);
 
 private:
-       std::vector<std::string> lang_;
+       QStringList lang_;
 };
 
 
-class PrefPrinter :  public PrefModule, public Ui::PrefPrinterUi
+class PrefPrinter : public PrefModule, public Ui::PrefPrinterUi
 {
        Q_OBJECT
 public:
@@ -319,24 +348,98 @@ public:
 };
 
 
-class PrefUserInterface :  public PrefModule, public Ui::PrefUi
+class PrefUserInterface : public PrefModule, public Ui::PrefUi
 {
        Q_OBJECT
 public:
-       PrefUserInterface(GuiPrefs * form, QWidget * parent = 0);
+       PrefUserInterface(GuiPreferences * form, QWidget * parent = 0);
 
        void apply(LyXRC & rc) const;
        void update(LyXRC const & rc);
 
 public Q_SLOTS:
        void select_ui();
+};
+
+
+class PrefEdit : public PrefModule, public Ui::PrefEditUi
+{
+       Q_OBJECT
+public:
+       PrefEdit(GuiPreferences * form, QWidget * parent = 0);
+
+       void apply(LyXRC & rc) const;
+       void update(LyXRC const & rc);
+};
+
+
+
+class GuiShortcutDialog : public QDialog, public Ui::shortcutUi
+{
+public:
+       GuiShortcutDialog(QWidget * parent);
+};
+
+
+class PrefShortcuts : public PrefModule, public Ui::PrefShortcuts
+{
+       Q_OBJECT
+private:
+       enum item_type {
+               System,         //< loaded from a bind file
+               UserBind,       //< \bind loaded from user.bind
+               UserUnbind,     //< \unbind loaded from user.bind, with corresponding
+                                       //<    entry in system bind file
+               UserExtraUnbind //< \unbind loaded from user.bind, without
+                                               //<    corresponding entry in system bind file.
+       };
+public:
+       PrefShortcuts(GuiPreferences * form, QWidget * parent = 0);
+
+       void apply(LyXRC & rc) const;
+       void update(LyXRC const & rc);
+       void updateShortcutsTW();
+       ///
+       void setItemType(QTreeWidgetItem * item, item_type tag);
+       QTreeWidgetItem * insertShortcutItem(FuncRequest const & lfun, 
+               KeySequence const & shortcut, item_type tag);
+
+public Q_SLOTS:
        void select_bind();
-       void on_loadWindowSizeCB_toggled(bool);
+       void on_newPB_pressed();
+       void on_removePB_pressed();
+       void on_searchLE_textEdited();
+       ///
+       void on_shortcutsTW_itemSelectionChanged();
+       void shortcut_okPB_pressed();
+       void shortcut_clearPB_pressed();
+       void on_shortcutsTW_itemDoubleClicked();
 
+private:
+       ///
+       GuiShortcutDialog * shortcut_;
+       ///
+       ButtonController shortcut_bc_;
+       /// category items
+       QTreeWidgetItem * editItem_;
+       QTreeWidgetItem * mathItem_;
+       QTreeWidgetItem * bufferItem_;
+       QTreeWidgetItem * layoutItem_;
+       QTreeWidgetItem * systemItem_;
+       // system_bind_ holds bindings from rc.bind_file
+       // user_bind_ holds \bind bindings from user.bind
+       // user_unbind_ holds \unbind bindings from user.bind
+       // When an item is inserted, it is added to user_bind_
+       // When an item from system_bind_ is deleted, it is added to user_unbind_
+       // When an item in user_bind_ or user_unbind_ is deleted, it is 
+       //      deleted (unbind)
+       KeyMap system_bind_;
+       KeyMap user_bind_;
+       KeyMap user_unbind_;
 };
 
 
-class PrefIdentity :  public PrefModule, public Ui::PrefIdentityUi
+class PrefIdentity : public PrefModule, public Ui::PrefIdentityUi
 {
        Q_OBJECT
 public:
@@ -346,12 +449,12 @@ public:
        void update(LyXRC const & rc);
 };
 
-///
-class GuiPrefsDialog : public QDialog, public Ui::PrefsUi
+
+class GuiPreferences : public GuiDialog, public Ui::PrefsUi
 {
        Q_OBJECT
 public:
-       GuiPrefsDialog(GuiPrefs *);
+       GuiPreferences(GuiView & lv);
 
        void apply(LyXRC & rc) const;
        void updateRc(LyXRC const & rc);
@@ -359,43 +462,72 @@ public:
 public Q_SLOTS:
        void change_adaptor();
 
-protected:
-       void closeEvent(QCloseEvent * e);
-
-private:
+public:
+       ///
        void add(PrefModule * module);
+       /// Apply changes
+       void applyView();
+       /// update (do we need this?)
+       void updateContents();
 
-private:
-       GuiPrefs * form_;
        std::vector<PrefModule *> modules_;
-};
 
+       ///
+       bool initialiseParams(std::string const &);
+       ///
+       void clearParams() {}
+       ///
+       void dispatchParams();
+       ///
+       bool isBufferDependent() const { return false; }
 
-class ControlPrefs;
+       /// various file pickers
+       QString browsebind(QString const & file) const;
+       QString browseUI(QString const & file) const;
+       QString browsekbmap(QString const & file) const;
+       QString browsedict(QString const & file) const;
 
-class GuiPrefs
-       : public QController<ControlPrefs, GuiView<GuiPrefsDialog> >
-{
-public:
-       GuiPrefs(Dialog &);
+       /// general browse
+       QString browse(QString const & file, QString const & title) const;
 
-       Converters & converters();
-       Formats & formats();
-       Movers & movers();
+       /// browse directory
+       QString browsedir(QString const & path, QString const & title) const;
 
-private:
-       /// Apply changes
-       virtual void apply();
+       /// set a color
+       void setColor(ColorCode col, std::string const & hex);
 
-       /// update (do we need this?)
-       virtual void update_contents();
+       /// update the screen fonts after change
+       void updateScreenFonts();
+
+       /// adjust the prefs paper sizes
+       PAPER_SIZE toPaperSize(int i) const;
+       /// adjust the prefs paper sizes
+       int fromPaperSize(PAPER_SIZE papersize) const;
 
-       /// build the dialog
-       virtual void build_dialog();
+       LyXRC & rc() { return rc_; }
+       Converters & converters() { return converters_; }
+       Formats & formats() { return formats_; }
+       Movers & movers() { return movers_; }
 
+private:
+       /// temporary lyxrc
+       LyXRC rc_;
+       /// temporary converters
+       Converters converters_;
+       /// temporary formats
+       Formats formats_;
+       /// temporary movers
+       Movers movers_;
+
+       /// A list of colors to be dispatched
+       std::vector<std::string> colors_;
+
+       bool redraw_gui_;
+       bool update_screen_font_;
 };
 
+
 } // namespace frontend
 } // namespace lyx
 
-#endif // QPREFS_H
+#endif // GUIPREFS_H