1 #pragma once
2 
3 #ifndef PREFERENCESPOPUP_H
4 #define PREFERENCESPOPUP_H
5 
6 // TnzQt includes
7 #include "toonzqt/dvdialog.h"
8 #include "toonzqt/intfield.h"
9 #include "toonzqt/doublefield.h"
10 #include "toonzqt/colorfield.h"
11 #include "toonzqt/checkbox.h"
12 #include "toonzqt/filefield.h"
13 
14 // TnzLib includes
15 #include "toonz/preferences.h"
16 
17 // Qt includes
18 #include <QComboBox>
19 #include <QFontComboBox>
20 #include <QTextEdit>
21 
22 //==============================================================
23 
24 //    Forward declarations
25 
26 class QLineEdit;
27 class QPushButton;
28 class QLabel;
29 class QGroupBox;
30 
31 //==============================================================
32 
33 //**********************************************************************************
34 //    PreferencesPopup  definition
35 //**********************************************************************************
36 typedef QPair<QString, QVariant> ComboBoxItem;
37 
38 class SizeField final : public QWidget {
39   Q_OBJECT
40   DVGui::IntLineEdit *m_fieldX, *m_fieldY;
41 
42 public:
43   SizeField(QSize min, QSize max, QSize value = QSize(),
44             QWidget* parent = nullptr);
45   QSize getValue() const;
46   void setValue(const QSize&);
47 signals:
48   void editingFinished();
49 };
50 
51 class PreferencesPopup;
52 
53 typedef void (PreferencesPopup::*OnEditedPopupFunc)();
54 
55 class PreferencesPopup final : public QDialog {
56   Q_OBJECT
57 
58   QMap<QWidget*, PreferencesItemId> m_controlIdMap;
59   QMap<PreferencesItemId, OnEditedPopupFunc> m_onEditedFuncMap;
60   QMap<PreferencesItemId, OnEditedPopupFunc> m_preEditedFuncMap;
61 
62 public:
63   PreferencesPopup();
64 
65 private:
66   class FormatProperties;
67   class AdditionalStyleEdit;
68 
69 private:
70   Preferences* m_pref;
71   FormatProperties* m_formatProperties;
72   AdditionalStyleEdit* m_additionalStyleEdit;
73 
74   DVGui::CheckBox *m_projectRootDocuments, *m_projectRootDesktop,
75       *m_projectRootCustom;
76   QPushButton* m_editLevelFormat;
77   QComboBox* m_levelFormatNames;
78 
79 private:
80   void rebuildFormatsList();
81   QList<ComboBoxItem> buildFontStyleList() const;
82 
83   QWidget* createUI(
84       PreferencesItemId id,
85       const QList<ComboBoxItem>& comboItems = QList<ComboBoxItem>());
86   QGridLayout* insertGroupBoxUI(PreferencesItemId id, QGridLayout* layout);
87   void insertUI(PreferencesItemId id, QGridLayout* layout,
88                 const QList<ComboBoxItem>& comboItems = QList<ComboBoxItem>());
89   void insertDualUIs(
90       PreferencesItemId leftId, PreferencesItemId rightId, QGridLayout* layout,
91       const QList<ComboBoxItem>& leftComboItems  = QList<ComboBoxItem>(),
92       const QList<ComboBoxItem>& rightComboItems = QList<ComboBoxItem>());
93   void insertFootNote(QGridLayout* layout);
94   QString getUIString(PreferencesItemId id);
95   QList<ComboBoxItem> getComboItemList(PreferencesItemId id) const;
96   template <typename T>
97   inline T getUI(PreferencesItemId id);
98 
99   QWidget* createGeneralPage();
100   QWidget* createInterfacePage();
101   QWidget* createVisualizationPage();
102   QWidget* createLoadingPage();
103   QWidget* createSavingPage();
104   QWidget* createImportExportPage();
105   QWidget* createDrawingPage();
106   QWidget* createToolsPage();
107   QWidget* createXsheetPage();
108   QWidget* createAnimationPage();
109   QWidget* createPreviewPage();
110   QWidget* createOnionSkinPage();
111   QWidget* createColorsPage();
112   QWidget* createVersionControlPage();
113   QWidget* createTouchTabletPage();
114 
115   //--- callbacks ---
116   // General
117   void onAutoSaveChanged();
118   void onAutoSaveOptionsChanged();
119   void onWatchFileSystemClicked();
120   void onPathAliasPriorityChanged();
121   // Interface
122   void onStyleSheetTypeChanged();
123   void onIconThemeChanged();
124   void onPixelsOnlyChanged();
125   void onUnitChanged();
126   void beforeRoomChoiceChanged();
127   void onColorCalibrationChanged();
128   // Drawing
129   void onDefLevelTypeChanged();
130   void onUseNumpadForSwitchingStylesClicked();
131   // Tools
132   void onLevelBasedToolsDisplayChanged();
133   // Xsheet
134   void onShowKeyframesOnCellAreaChanged();
135   void onShowXSheetToolbarClicked();
136   // Animation
137   void onModifyExpressionOnMovingReferencesChanged();
138   // Preview
139   void onBlankCountChanged();
140   void onBlankColorChanged();
141   // Onion Skin
142   void onOnionSkinVisibilityChanged();
143   void onOnionColorChanged();
144   // Colors
145   void onTranspCheckDataChanged();
146   // Version Control
147   void onSVNEnabledChanged();
148   // Commonly used
149   void notifySceneChanged();
150 
151 private slots:
152   void onChange();
153   void onColorFieldChanged(const TPixel32&, bool);
154 
155   void onAutoSaveExternallyChanged();
156   void onAutoSavePeriodExternallyChanged();
157   void onProjectRootChanged();
158 
159   void onEditAdditionalStyleSheet();
160   void onAdditionalStyleSheetEdited();
161   void onPixelUnitExternallySelected(bool on);
162   void onInterfaceFontChanged(const QString& text);
163   void onLutPathChanged();
164 
165   void onAddLevelFormat();
166   void onRemoveLevelFormat();
167   void onEditLevelFormat();
168   void onLevelFormatEdited();
169   void onImportPolicyExternallyChanged(int policy);
170 };
171 
172 //**********************************************************************************
173 //    PreferencesPopup::FormatProperties  definition
174 //**********************************************************************************
175 
176 class PreferencesPopup::FormatProperties final : public DVGui::Dialog {
177   Q_OBJECT
178 
179 public:
180   FormatProperties(PreferencesPopup* parent);
181 
182   void setLevelFormat(const Preferences::LevelFormat& lf);
183   Preferences::LevelFormat levelFormat() const;
184 
185 private:
186   QComboBox* m_dpiPolicy;
187 
188   DVGui::LineEdit *m_name, *m_regExp;
189 
190   DVGui::DoubleLineEdit* m_dpi;
191 
192   DVGui::IntLineEdit *m_priority, *m_subsampling, *m_antialias;
193 
194   DVGui::CheckBox *m_premultiply, *m_whiteTransp, *m_doAntialias;
195 
196 private slots:
197 
198   void updateEnabledStatus();
199 };
200 
201 //**********************************************************************************
202 //   PreferencesPopup::AdditionalStyleEdit  definition
203 //**********************************************************************************
204 
205 class PreferencesPopup::AdditionalStyleEdit final : public DVGui::Dialog {
206   Q_OBJECT
207 
208 public:
209   AdditionalStyleEdit(PreferencesPopup* parent);
210 
211 private:
212   QTextEdit* m_edit;
213 
214 protected:
215   void showEvent(QShowEvent* e) override;
216 
217 private slots:
218   void onOK();
219   void onApply();
220 signals:
221   void additionalSheetEdited();
222 };
223 
224 #endif  // PREFERENCESPOPUP_H
225