1 #ifndef DLG_SETTINGS_H 2 #define DLG_SETTINGS_H 3 4 #include <QCheckBox> 5 #include <QComboBox> 6 #include <QDialog> 7 #include <QGroupBox> 8 #include <QLabel> 9 #include <QPushButton> 10 #include <QSpinBox> 11 12 class CardDatabase; 13 class QCloseEvent; 14 class QGridLayout; 15 class QHBoxLayout; 16 class QLineEdit; 17 class QListWidget; 18 class QListWidgetItem; 19 class QRadioButton; 20 class QSlider; 21 class QStackedWidget; 22 class QTreeWidget; 23 class QTreeWidgetItem; 24 class QVBoxLayout; 25 class SequenceEdit; 26 27 class AbstractSettingsPage : public QWidget 28 { 29 public: 30 virtual void retranslateUi() = 0; 31 }; 32 33 class GeneralSettingsPage : public AbstractSettingsPage 34 { 35 Q_OBJECT 36 public: 37 GeneralSettingsPage(); 38 void retranslateUi() override; 39 40 private slots: 41 void deckPathButtonClicked(); 42 void replaysPathButtonClicked(); 43 void picsPathButtonClicked(); 44 void cardDatabasePathButtonClicked(); 45 void customCardDatabaseButtonClicked(); 46 void tokenDatabasePathButtonClicked(); 47 void languageBoxChanged(int index); 48 49 private: 50 QStringList findQmFiles(); 51 QString languageName(const QString &qmFile); 52 QLineEdit *deckPathEdit; 53 QLineEdit *replaysPathEdit; 54 QLineEdit *picsPathEdit; 55 QLineEdit *cardDatabasePathEdit; 56 QLineEdit *customCardDatabasePathEdit; 57 QLineEdit *tokenDatabasePathEdit; 58 QSpinBox pixmapCacheEdit; 59 QGroupBox *personalGroupBox; 60 QGroupBox *pathsGroupBox; 61 QComboBox languageBox; 62 QCheckBox updateNotificationCheckBox; 63 QCheckBox newVersionOracleCheckBox; 64 QComboBox updateReleaseChannelBox; 65 QLabel languageLabel; 66 QLabel pixmapCacheLabel; 67 QLabel deckPathLabel; 68 QLabel replaysPathLabel; 69 QLabel picsPathLabel; 70 QLabel cardDatabasePathLabel; 71 QLabel customCardDatabasePathLabel; 72 QLabel tokenDatabasePathLabel; 73 QLabel updateReleaseChannelLabel; 74 QCheckBox showTipsOnStartup; 75 }; 76 77 class AppearanceSettingsPage : public AbstractSettingsPage 78 { 79 Q_OBJECT 80 private slots: 81 void themeBoxChanged(int index); 82 83 private: 84 QLabel themeLabel; 85 QComboBox themeBox; 86 QLabel minPlayersForMultiColumnLayoutLabel; 87 QLabel maxFontSizeForCardsLabel; 88 QCheckBox displayCardNamesCheckBox; 89 QCheckBox cardScalingCheckBox; 90 QCheckBox horizontalHandCheckBox; 91 QCheckBox leftJustifiedHandCheckBox; 92 QCheckBox invertVerticalCoordinateCheckBox; 93 QGroupBox *themeGroupBox; 94 QGroupBox *cardsGroupBox; 95 QGroupBox *handGroupBox; 96 QGroupBox *tableGroupBox; 97 QSpinBox minPlayersForMultiColumnLayoutEdit; 98 QSpinBox maxFontSizeForCardsEdit; 99 100 public: 101 AppearanceSettingsPage(); 102 void retranslateUi() override; 103 }; 104 105 class UserInterfaceSettingsPage : public AbstractSettingsPage 106 { 107 Q_OBJECT 108 private slots: 109 void setSpecNotificationEnabled(int); 110 111 private: 112 QCheckBox notificationsEnabledCheckBox; 113 QCheckBox specNotificationsEnabledCheckBox; 114 QCheckBox buddyConnectNotificationsEnabledCheckBox; 115 QCheckBox doubleClickToPlayCheckBox; 116 QCheckBox playToStackCheckBox; 117 QCheckBox annotateTokensCheckBox; 118 QCheckBox useTearOffMenusCheckBox; 119 QCheckBox tapAnimationCheckBox; 120 QGroupBox *generalGroupBox; 121 QGroupBox *notificationsGroupBox; 122 QGroupBox *animationGroupBox; 123 124 public: 125 UserInterfaceSettingsPage(); 126 void retranslateUi() override; 127 }; 128 129 class DeckEditorSettingsPage : public AbstractSettingsPage 130 { 131 Q_OBJECT 132 public: 133 DeckEditorSettingsPage(); 134 void retranslateUi() override; 135 QString getLastUpdateTime(); 136 137 private slots: 138 void storeSettings(); 139 void urlListChanged(const QModelIndex &, int, int, const QModelIndex &, int); 140 void setSpoilersEnabled(bool); 141 void spoilerPathButtonClicked(); 142 void updateSpoilers(); 143 void unlockSettings(); 144 void actAddURL(); 145 void actRemoveURL(); 146 void actEditURL(); 147 void clearDownloadedPicsButtonClicked(); 148 void resetDownloadedURLsButtonClicked(); 149 150 private: 151 QPushButton clearDownloadedPicsButton; 152 QPushButton resetDownloadURLs; 153 QLabel urlLinkLabel; 154 QCheckBox picDownloadCheckBox; 155 QListWidget *urlList; 156 QCheckBox mcDownloadSpoilersCheckBox; 157 QLabel msDownloadSpoilersLabel; 158 QGroupBox *mpGeneralGroupBox; 159 QGroupBox *mpSpoilerGroupBox; 160 QLineEdit *mpSpoilerSavePathLineEdit; 161 QLabel mcSpoilerSaveLabel; 162 QLabel lastUpdatedLabel; 163 QLabel infoOnSpoilersLabel; 164 QPushButton *mpSpoilerPathButton; 165 QPushButton *updateNowButton; 166 }; 167 168 class MessagesSettingsPage : public AbstractSettingsPage 169 { 170 Q_OBJECT 171 public: 172 MessagesSettingsPage(); 173 void retranslateUi() override; 174 175 private slots: 176 void actAdd(); 177 void actEdit(); 178 void actRemove(); 179 void updateColor(const QString &value); 180 void updateHighlightColor(const QString &value); 181 void updateTextColor(int value); 182 void updateTextHighlightColor(int value); 183 184 private: 185 QListWidget *messageList; 186 QAction *aAdd; 187 QAction *aEdit; 188 QAction *aRemove; 189 QCheckBox chatMentionCheckBox; 190 QCheckBox chatMentionCompleterCheckbox; 191 QCheckBox invertMentionForeground; 192 QCheckBox invertHighlightForeground; 193 QCheckBox ignoreUnregUsersMainChat; 194 QCheckBox ignoreUnregUserMessages; 195 QCheckBox messagePopups; 196 QCheckBox mentionPopups; 197 QCheckBox roomHistory; 198 QGroupBox *chatGroupBox; 199 QGroupBox *highlightGroupBox; 200 QGroupBox *messageShortcuts; 201 QLineEdit *mentionColor; 202 QLineEdit *highlightColor; 203 QLineEdit *customAlertString; 204 QLabel hexLabel; 205 QLabel hexHighlightLabel; 206 QLabel customAlertStringLabel; 207 208 void storeSettings(); 209 void updateMentionPreview(); 210 void updateHighlightPreview(); 211 }; 212 213 class SoundSettingsPage : public AbstractSettingsPage 214 { 215 Q_OBJECT 216 public: 217 SoundSettingsPage(); 218 void retranslateUi() override; 219 220 private: 221 QLabel themeLabel; 222 QComboBox themeBox; 223 QGroupBox *soundGroupBox; 224 QPushButton soundTestButton; 225 QCheckBox soundEnabledCheckBox; 226 QLabel masterVolumeLabel; 227 QSlider *masterVolumeSlider; 228 QSpinBox *masterVolumeSpinBox; 229 230 private slots: 231 void masterVolumeChanged(int value); 232 void themeBoxChanged(int index); 233 }; 234 235 class ShortcutSettingsPage : public AbstractSettingsPage 236 { 237 Q_OBJECT 238 public: 239 ShortcutSettingsPage(); 240 void retranslateUi() override; 241 242 private: 243 QTreeWidget *shortcutsTable; 244 QVBoxLayout *mainLayout; 245 QHBoxLayout *buttonsLayout; 246 QGroupBox *editShortcutGroupBox; 247 QGridLayout *editLayout; 248 QLabel *currentActionGroupLabel; 249 QLabel *currentActionGroupName; 250 QLabel *currentActionLabel; 251 QLabel *currentActionName; 252 QLabel *currentShortcutLabel; 253 SequenceEdit *editTextBox; 254 QLabel *faqLabel; 255 QPushButton *btnResetAll; 256 QPushButton *btnClearAll; 257 258 private slots: 259 void resetShortcuts(); 260 void refreshShortcuts(); 261 void createShortcuts(); 262 void clearShortcuts(); 263 void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); 264 }; 265 266 class DlgSettings : public QDialog 267 { 268 Q_OBJECT 269 public: 270 explicit DlgSettings(QWidget *parent = nullptr); 271 void setTab(int index); 272 273 private slots: 274 void changePage(QListWidgetItem *current, QListWidgetItem *previous); 275 void updateLanguage(); 276 277 private: 278 QListWidget *contentsWidget; 279 QStackedWidget *pagesWidget; 280 QListWidgetItem *generalButton, *appearanceButton, *userInterfaceButton, *deckEditorButton, *messagesButton, 281 *soundButton, *shortcutsButton; 282 void createIcons(); 283 void retranslateUi(); 284 285 protected: 286 void changeEvent(QEvent *event) override; 287 void closeEvent(QCloseEvent *event) override; 288 }; 289 290 #endif 291