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