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