1 #ifndef TWEAKEDQMLAPPVIEWER_H
2 #define TWEAKEDQMLAPPVIEWER_H
3 
4 #include <qglobal.h>
5 #include <QTimer>
6 #include <QStringList>
7 #include <QMap>
8 #include <QHash>
9 
10 #if QT_VERSION < 0x050000
11 #include "qmlapplicationviewer/qmlapplicationviewer.h"
12 #else
13 #include <QQuickView>
14 #include <QWindow>
15 #include <QByteArray>
16 #endif
17 
18 #include "processmanager.h"
19 #include "imageprovider.h"
20 #include "infoprovider.h"
21 #include "keysequencemap.h"
22 #if defined(QMC2_ARCADE_ENABLE_JOYSTICK)
23 #include "joyfunctionmap.h"
24 #include "joystickmanager.h"
25 #endif
26 
27 #define QMC2_ARCADE_PARAM_THEME     0
28 #if QT_VERSION < 0x050000
29 #define QMC2_ARCADE_PARAM_GRASYS    1
30 #define QMC2_ARCADE_PARAM_CONSOLE   2
31 #define QMC2_ARCADE_PARAM_LANGUAGE  3
32 #define QMC2_ARCADE_PARAM_VIDEO     4
33 #else
34 #define QMC2_ARCADE_PARAM_CONSOLE   1
35 #define QMC2_ARCADE_PARAM_LANGUAGE  2
36 #define QMC2_ARCADE_PARAM_VIDEO     3
37 #endif
38 
39 #if QT_VERSION < 0x050000
40 class TweakedQmlApplicationViewer : public QmlApplicationViewer
41 		#else
42 class TweakedQmlApplicationViewer : public QQuickView
43 		#endif
44 {
45 	Q_OBJECT
46 
47 public:
48 	int numFrames;
49 	QTimer frameCheckTimer;
50 	QByteArray savedGeometry;
51 	bool savedMaximized;
52 	QList<QObject *> gameList;
53 	ProcessManager *processManager;
54 	ImageProvider *imageProvider;
55 	InfoProvider *infoProvider;
56 	bool windowModeSwitching;
57 	QMap<QString, QStringList> cliAllowedParameterValues;
58 	QMap<QString, QString> cliParameterDescriptions;
59 	QStringList cliParams;
60 	QStringList infoClasses;
61 	QStringList videoSnapAllowedFormatExtensions;
62 	KeySequenceMap *keySequenceMap;
63 #if defined(QMC2_ARCADE_ENABLE_JOYSTICK)
64 	JoyFunctionMap *joyFunctionMap;
65 	JoystickManager *joystickManager;
66 #endif
67 	static int consoleMode;
68 
69 #if QT_VERSION < 0x050000
70 	explicit TweakedQmlApplicationViewer(QWidget *parent = 0);
71 #else
72 	explicit TweakedQmlApplicationViewer(QWindow *parent = 0);
73 #endif
74 	virtual ~TweakedQmlApplicationViewer();
75 
76 #if QT_VERSION >= 0x050000
isFullScreen()77 	bool isFullScreen()
78 	{
79 		return windowState() & Qt::WindowFullScreen;
80 	}
isMaximized()81 	bool isMaximized()
82 	{
83 		return windowState() & Qt::WindowMaximized;
84 	}
saveGeometry()85 	QByteArray saveGeometry()
86 	{
87 		// FIXME
88 		return QByteArray();
89 	}
restoreGeometry(const QByteArray & geom)90 	void restoreGeometry(const QByteArray &geom)
91 	{
92 		// FIXME
93 	}
94 #endif
95 
96 	int themeIndex();
setVideoEnabled(bool enable)97 	void setVideoEnabled(bool enable) { m_videoEnabled = enable; }
videoEnabled()98 	bool videoEnabled() { return m_videoEnabled; }
setInitialFullScreen(bool enable)99 	void setInitialFullScreen(bool enable) { m_initialFullScreen = enable; }
initialFullScreen()100 	bool initialFullScreen() { return m_initialFullScreen; }
101 
102 	// logging functions
103 	static void logString(const QString &s);
104 	static void logStringNoTime(const QString &s);
105 	static void logCString(const char *s);
106 	static void logCStringNoTime(const char *s);
107 
108 signals:
109 	void emulatorStarted(int);
110 	void emulatorFinished(int);
111 	void imageDataUpdated(const QString & cachePrefix);
112 
113 public slots:
114 	void displayInit();
115 	void fpsReady();
116 	void loadSettings();
117 	void saveSettings();
118 	void switchToFullScreen(bool initially = false);
119 	void switchToWindowed(bool initially = false);
120 	QString romStateText(int);
121 	int romStateCharToInt(char);
122 	void loadMachineList();
123 	void launchEmulator(QString);
124 	QString loadImage(const QString &);
125 	QString requestInfo(const QString &, const QString &);
126 	QString videoSnapUrl(const QString &);
127 	int findIndex(QString, int startIndex = 0);
128 	void log(QString);
129 	QStringList cliParamNames();
130 	QString cliParamDescription(QString);
131 	QString cliParamValue(QString);
132 	QStringList cliParamAllowedValues(QString);
133 	void setCliParamValue(QString, QString);
134 	void linkActivated(QString);
135 	QString emuMode();
136 #if QT_VERSION >= 0x050000
frameBufferSwapped()137 	void frameBufferSwapped() { numFrames++; }
138 	void handleQuit();
139 #endif
runningEmulators()140 	int runningEmulators() { return processManager->runningProcesses(); }
imageDataUpdate(const QString & cachePrefix)141 	void imageDataUpdate(const QString &cachePrefix) { emit imageDataUpdated(cachePrefix); }
isSevenZippedImageType(const QString & type)142 	bool isSevenZippedImageType(const QString & type) { return imageProvider->isSevenZippedImageType(type); }
isZippedImageType(const QString & type)143 	bool isZippedImageType(const QString & type) { return imageProvider->isZippedImageType(type); }
144 	bool iconCacheDatabaseEnabled();
145 	QString parentId(QString id);
146 	QStringList customSystemArtwork();
147 	QStringList customSoftwareArtwork();
148 	QString nextCustomSytemArtwork();
149 	QString previousCustomSytemArtwork();
150 	QString nextCustomSoftwareArtwork();
151 	QString previousCustomSoftwareArtwork();
customCachePrefix(const QString & name)152 	QString customCachePrefix(const QString &name) { return imageProvider->customCachePrefix(name); }
153 
154 private:
155 	bool m_initialized;
156 	bool m_videoEnabled;
157 	bool m_initialFullScreen;
158 	QHash<QString, QString> m_parentHash;
159 	QHash<QString, QString> m_videoSnapUrlCache;
160 	int m_currentSystemArtworkIndex;
161 	int m_currentSoftwareArtworkIndex;
162 
163 #if QT_VERSION < 0x050000
164 protected:
165 	void paintEvent(QPaintEvent *);
166 	void closeEvent(QCloseEvent *);
167 #endif
168 };
169 
170 #endif
171