1 #ifndef OPTIONS_H
2 #define OPTIONS_H
3 
4 #include <QWidget>
5 #include <QMap>
6 #include <QLabel>
7 #include <QProgressBar>
8 #include <QCheckBox>
9 #include <QSpinBox>
10 #include <QScrollArea>
11 
12 #include "settings.h"
13 #include "ui_options.h"
14 #include "macros.h"
15 
16 #if QMC2_JOYSTICK == 1
17 #include "joystick.h"
18 
19 class JoystickCalibrationWidget : public QWidget
20 {
21 	Q_OBJECT
22 
23 	public:
24 		Joystick *myJoystick;
25 		QMap<int, QCheckBox *> axesEnablers;
26 		QMap<int, QProgressBar *> axesRanges;
27 		QMap<int, QSpinBox *> axesDeadzones;
28 		QMap<int, QSpinBox *> axesSensitivities;
29 		QMap<int, QToolButton *> axesButtons;
30 		QMap<int, QLabel *> sensitivityLabels;
31 		QMap<int, QLabel *> deadzoneLabels;
32 		QMap<int, int> axesMinimums;
33 		QMap<int, int> axesMaximums;
34 		QGridLayout *myLayout;
35 
36 		JoystickCalibrationWidget(Joystick *joystick, QWidget *parent = 0);
37 		~JoystickCalibrationWidget();
38 
39 	public slots:
40 		void on_joystickAxisValueChanged(int, int);
41 		void on_joystickButtonValueChanged(int, bool);
42 		void on_joystickHatValueChanged(int, int);
43 		void on_joystickTrackballValueChanged(int, int, int);
44 		void on_resetAxisCalibration();
45 		void on_deadzoneValueChanged(int);
46 		void on_sensitivityValueChanged(int);
47 		void on_axisEnablerStateChanged(int);
48 };
49 
50 class JoystickTestWidget : public QWidget
51 {
52 	Q_OBJECT
53 
54 	public:
55 		Joystick *myJoystick;
56 		QMap<int, QProgressBar *> axesRanges;
57 		QMap<int, QLabel *> buttonLabels;
58 		QMap<int, QLabel *> hatValueLabels;
59 		QMap<int, QLabel *> trackballDeltaXLabels;
60 		QMap<int, QLabel *> trackballDeltaYLabels;
61 		QGridLayout *myLayout;
62 
63 		JoystickTestWidget(Joystick *joystick, QWidget *parent = 0);
64 		~JoystickTestWidget();
65 
66 	public slots:
67 		void on_joystickAxisValueChanged(int, int);
68 		void on_joystickButtonValueChanged(int, bool);
69 		void on_joystickHatValueChanged(int, int);
70 		void on_joystickTrackballValueChanged(int, int, int);
71 		void cleanupPalette();
72 };
73 #endif
74 
75 class Options : public QDialog, public Ui::Options
76 {
77 	Q_OBJECT
78 
79 	public:
80 		Settings *config;
81 		bool applied;
82 		bool cancelClicked;
83 #if QMC2_JOYSTICK == 1
84 		Joystick *joystick;
85 		JoystickCalibrationWidget *joystickCalibrationWidget;
86 		JoystickTestWidget *joystickTestWidget;
87 		QScrollArea *scrollArea;
88 #endif
89 		QStringList registeredEmulatorsToBeRemoved;
90 		static QBrush redBrush;
91 		static QBrush greenBrush;
92 		static QBrush lightgreyBrush;
93 		static QBrush greyBrush;
94 		static QBrush yellowBrush;
95 		static QBrush blueBrush;
96 
97 		QCheckBox *checkBoxEnableOutputNotifiers;
98 
99 		Options(QWidget *parent = 0);
100 		~Options();
101 
102 		void apply();
103 		void restoreCurrentConfig(bool useDefaultSettings = false);
104 
105 #if defined(QMC2_OS_MAC)
useNativeFileDialogs()106 		bool useNativeFileDialogs() { return config->value(QMC2_FRONTEND_PREFIX + "GUI/NativeFileDialogs", true).toBool(); }
107 #else
useNativeFileDialogs()108 		bool useNativeFileDialogs() { return config->value(QMC2_FRONTEND_PREFIX + "GUI/NativeFileDialogs", false).toBool(); }
109 #endif
110 		int iconFileType();
setStandardWorkDir(const QString & d)111 		void setStandardWorkDir(const QString &d) { m_standardWorkDir = d; }
standardWorkDir()112 		QString &standardWorkDir() { return m_standardWorkDir; }
setCurrentStyleName(const QString & s)113 		void setCurrentStyleName(const QString &s) { m_currentStyleName = s; }
currentStyleName()114 		QString &currentStyleName() { return m_currentStyleName; }
outputNotifiersEnabled()115 		bool outputNotifiersEnabled() { return m_enableOutputNotifiers; }
setEnableOutputNotifiers(bool enable)116 		void setEnableOutputNotifiers(bool enable) { m_enableOutputNotifiers = enable; }
117 
118 		static QString configPath();
119 
120 	public slots:
121 		// callback functions
122 		void on_pushButtonOk_clicked();
123 		void on_pushButtonCancel_clicked();
124 		void on_pushButtonRestore_clicked();
125 		void on_pushButtonApply_clicked();
126 		void on_pushButtonDefault_clicked();
127 		void on_toolButtonBrowseStyleSheet_clicked();
128 		void on_toolButtonBrowseFrontendLogFile_clicked();
129 		void on_toolButtonBrowseEmulatorLogFile_clicked();
130 		void on_toolButtonBrowseFavoritesFile_clicked();
131 		void on_toolButtonBrowseHistoryFile_clicked();
132 		void on_toolButtonBrowseMachineListCacheFile_clicked();
133 		void on_toolButtonBrowseMachineListDatabase_clicked();
134 		void on_toolButtonBrowseROMStateCacheFile_clicked();
135 		void on_toolButtonBrowseSoftwareListCacheDb_clicked();
136 		void on_toolButtonBrowseSoftwareStateCache_clicked();
137 		void on_toolButtonBrowseGeneralSoftwareFolder_clicked();
138 		void on_toolButtonBrowsePreviewDirectory_clicked();
139 		void on_toolButtonBrowsePreviewFile_clicked();
140 		void on_toolButtonBrowseFlyerDirectory_clicked();
141 		void on_toolButtonBrowseFlyerFile_clicked();
142 		void on_toolButtonBrowseIconDirectory_clicked();
143 		void on_toolButtonBrowseIconFile_clicked();
144 		void on_toolButtonBrowseCabinetDirectory_clicked();
145 		void on_toolButtonBrowseCabinetFile_clicked();
146 		void on_toolButtonBrowseControllerDirectory_clicked();
147 		void on_toolButtonBrowseControllerFile_clicked();
148 		void on_toolButtonBrowseMarqueeDirectory_clicked();
149 		void on_toolButtonBrowseMarqueeFile_clicked();
150 		void on_toolButtonBrowseTitleDirectory_clicked();
151 		void on_toolButtonBrowseTitleFile_clicked();
152 		void on_toolButtonBrowsePCBDirectory_clicked();
153 		void on_toolButtonBrowsePCBFile_clicked();
154 		void on_toolButtonBrowseSoftwareSnapDirectory_clicked();
155 		void on_toolButtonBrowseSoftwareSnapFile_clicked();
156 		void on_toolButtonBrowseSoftwareNotesFolder_clicked();
157 		void on_toolButtonBrowseSoftwareNotesTemplate_clicked();
158 		void on_toolButtonBrowseSystemNotesFolder_clicked();
159 		void on_toolButtonBrowseSystemNotesTemplate_clicked();
160 		void on_toolButtonBrowseVideoSnapFolder_clicked();
161 		void on_toolButtonScanSystemManuals_clicked();
162 		void on_toolButtonBrowseSystemManualFolder_clicked();
163 		void on_toolButtonScanSoftwareManuals_clicked();
164 		void on_toolButtonBrowseSoftwareManualFolder_clicked();
165 		void on_toolButtonBrowseExecutableFile_clicked();
166 		void on_toolButtonBrowseCookieDatabase_clicked();
167 		void on_toolButtonBrowseDataDirectory_clicked();
168 		void on_toolButtonBrowseDatInfoDatabase_clicked();
169 		void on_toolButtonBrowseMameHistoryDat_clicked();
170 		void on_toolButtonBrowseMessSysinfoDat_clicked();
171 		void on_toolButtonBrowseMameInfoDat_clicked();
172 		void on_toolButtonBrowseMessInfoDat_clicked();
173 		void on_toolButtonBrowseSoftwareInfoDB_clicked();
174 		void on_toolButtonBrowseCatverIniFile_clicked();
175 		void on_toolButtonBrowseCategoryIniFile_clicked();
176 		void on_toolButtonBrowseWorkingDirectory_clicked();
177 		void on_toolButtonBrowseOptionsTemplateFile_clicked();
178 		void on_toolButtonBrowseXmlCacheDatabase_clicked();
179 		void on_toolButtonClearUserDataDatabase_clicked();
180 		void on_toolButtonCleanupUserDataDatabase_clicked();
181 		void on_toolButtonBrowseUserDataDatabase_clicked();
182 		void on_toolButtonBrowseFont_clicked();
183 		void on_toolButtonBrowseLogFont_clicked();
184 		void on_toolButtonBrowseZipTool_clicked();
185 		void on_toolButtonBrowseSevenZipTool_clicked();
186 		void on_toolButtonBrowseRomTool_clicked();
187 		void on_toolButtonBrowseRomToolWorkingDirectory_clicked();
188 		void on_radioButtonPreviewSelect_clicked();
189 		void on_radioButtonFlyerSelect_clicked();
190 		void on_radioButtonIconSelect_clicked();
191 		void on_radioButtonCabinetSelect_clicked();
192 		void on_radioButtonControllerSelect_clicked();
193 		void on_radioButtonMarqueeSelect_clicked();
194 		void on_radioButtonTitleSelect_clicked();
195 		void on_radioButtonPCBSelect_clicked();
196 		void on_radioButtonSoftwareSnapSelect_clicked();
197 		void on_treeWidgetShortcuts_itemActivated(QTreeWidgetItem *item);
198 		void on_treeWidgetShortcuts_itemSelectionChanged();
199 		void on_pushButtonRedefineKeySequence_clicked();
200 		void on_pushButtonResetShortcut_clicked();
201 		void on_pushButtonComponentSetup_clicked();
202 		void on_pushButtonCustomizeToolBar_clicked();
203 		void on_pushButtonIndividualFallbackSettings_clicked();
204 		void on_pushButtonEditPalette_clicked();
205 		void on_toolButtonBrowseAdditionalEmulatorExecutable_clicked();
206 		void on_toolButtonBrowseAdditionalEmulatorWorkingDirectory_clicked();
207 		void on_toolButtonAddEmulator_clicked();
208 		void on_toolButtonSaveEmulator_clicked();
209 		void on_toolButtonRemoveEmulator_clicked();
210 		void on_toolButtonCustomIDs_clicked();
211 		void on_tableWidgetRegisteredEmulators_itemSelectionChanged();
on_tableWidgetRegisteredEmulators_itemClicked(QTableWidgetItem *)212 		void on_tableWidgetRegisteredEmulators_itemClicked(QTableWidgetItem *) { on_tableWidgetRegisteredEmulators_itemSelectionChanged(); }
213 		void on_lineEditAdditionalEmulatorName_textChanged(const QString &);
214 		void on_lineEditAdditionalEmulatorArguments_textChanged(const QString &);
215 		void on_pushButtonClearCookieDatabase_clicked();
216 		void on_pushButtonManageCookies_clicked();
217 		void on_pushButtonAdditionalArtworkSetup_clicked();
218 		void on_pushButtonImageFormats_clicked();
219 		void on_toolButtonImportGameInfo_clicked();
220 		void on_toolButtonImportMachineInfo_clicked();
221 		void on_toolButtonImportMameInfo_clicked();
222 		void on_toolButtonImportMessInfo_clicked();
223 		void on_toolButtonImportSoftwareInfo_clicked();
224 		void on_toolButtonOptimizeCatverIni_clicked();
225 		void on_toolButtonSetupIconDatabase_clicked();
226 
227 		// joystick setup callbacks
228 #if QMC2_JOYSTICK == 1
229 		void on_pushButtonRescanJoysticks_clicked();
230 		void on_toolButtonCalibrateAxes_clicked();
231 		void on_toolButtonTestJoystick_clicked();
232 		void on_toolButtonMapJoystick_clicked();
233 		void on_comboBoxSelectJoysticks_currentIndexChanged(int);
234 		void on_checkBoxEnableJoystickControl_toggled(bool);
235 		void on_checkBoxJoystickAutoRepeat_toggled(bool);
236 		void on_spinBoxJoystickAutoRepeatTimeout_valueChanged(int);
237 		void on_spinBoxJoystickEventTimeout_valueChanged(int);
238 		void on_treeWidgetJoystickMappings_itemActivated(QTreeWidgetItem *item);
239 		void on_treeWidgetJoystickMappings_itemSelectionChanged();
240 		void on_pushButtonRemapJoystickFunction_clicked();
241 		void on_pushButtonRemoveJoystickMapping_clicked();
242 		void checkJoystickMappings();
243 #endif
244 
245 		// other slots
246 		void checkShortcuts();
247 		void setupShortcutActions();
248 		void applyDelayed();
249 		void setupCustomIDsClicked();
250 		void chooseEmuIconClicked();
251 		void actionDefaultEmuIconTriggered();
252 		void actionNoEmuIconTriggered();
253 		void checkPlaceholderStatus();
254 		void loadCustomPalette(QString);
255 		void saveCustomPalette();
256 		void enableWidgets(bool enable = true);
257 
258 	protected:
259 		void moveEvent(QMoveEvent *);
260 		void resizeEvent(QResizeEvent *);
261 
262 	private:
263 		QString m_standardWorkDir;
264 		QString m_currentStyleName;
265 		bool m_enableOutputNotifiers;
266 };
267 
268 #endif
269