diff --git a/blackberry-qnx/bb10/.cproject b/blackberry-qnx/bb10/.cproject
new file mode 100644
index 0000000000..e6ecda9067
--- /dev/null
+++ b/blackberry-qnx/bb10/.cproject
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/blackberry-qnx/bb10/.project b/blackberry-qnx/bb10/.project
new file mode 100644
index 0000000000..2ac321a0db
--- /dev/null
+++ b/blackberry-qnx/bb10/.project
@@ -0,0 +1,91 @@
+
+
+ RetroArch-Cascades
+
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.genmakebuilder
+
+
+ ?name?
+
+
+
+ org.eclipse.cdt.make.core.append_environment
+ true
+
+
+ org.eclipse.cdt.make.core.autoBuildTarget
+ Device-Debug
+
+
+ org.eclipse.cdt.make.core.buildArguments
+
+
+
+ org.eclipse.cdt.make.core.buildCommand
+ make
+
+
+ org.eclipse.cdt.make.core.cleanBuildTarget
+ clean
+
+
+ org.eclipse.cdt.make.core.contents
+ org.eclipse.cdt.make.core.activeConfigSettings
+
+
+ org.eclipse.cdt.make.core.enableAutoBuild
+ true
+
+
+ org.eclipse.cdt.make.core.enableCleanBuild
+ true
+
+
+ org.eclipse.cdt.make.core.enableFullBuild
+ true
+
+
+ org.eclipse.cdt.make.core.fullBuildTarget
+ Device-Debug
+
+
+ org.eclipse.cdt.make.core.stopOnError
+ true
+
+
+ org.eclipse.cdt.make.core.useDefaultBuildCmd
+ true
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
+ full,incremental,
+
+
+
+
+ com.rim.tad.tools.qml.core.qmlFileBuilder
+
+
+
+
+ com.qnx.tools.bbt.xml.core.bbtXMLValidationBuilder
+
+
+
+
+
+ com.rim.tad.tools.wst.jsdt.core.jsNature
+ org.eclipse.cdt.core.cnature
+ org.eclipse.cdt.managedbuilder.core.managedBuildNature
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
+ com.qnx.tools.ide.bbt.core.bbtnature
+ org.eclipse.cdt.core.ccnature
+ com.rim.tad.tools.qml.core.qmlNature
+
+
diff --git a/blackberry-qnx/bb10/Makefile b/blackberry-qnx/bb10/Makefile
new file mode 100644
index 0000000000..ce6a86aa05
--- /dev/null
+++ b/blackberry-qnx/bb10/Makefile
@@ -0,0 +1,6 @@
+QMAKE_TARGET = RetroArch-Cascades
+PROJECT_DIR := $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
+I18N_DIR := $(PROJECT_DIR)/translations
+
+include mk/cs-base.mk
+
diff --git a/blackberry-qnx/bb10/RetroArch-Cascades.pro b/blackberry-qnx/bb10/RetroArch-Cascades.pro
new file mode 100644
index 0000000000..e2c36e3e21
--- /dev/null
+++ b/blackberry-qnx/bb10/RetroArch-Cascades.pro
@@ -0,0 +1,25 @@
+APP_NAME = RetroArch-Cascades
+
+CONFIG += qt warn_on cascades10
+
+LIBS += -lscreen -lbps -lOpenAL -lpng -lEGL -lGLESv2
+LIBS += -lbbcascadespickers -lbbdata
+
+DEFINES += HAVE_RGUI HAVE_NEON \
+ SINC_LOWER_QUALITY HAVE_RARCH_MAIN_IMPLEMENTATION \
+ HAVE_VID_CONTEXT HAVE_FBO HAVE_GRIFFIN __LIBRETRO__ \
+ HAVE_DYNAMIC HAVE_ZLIB __BLACKBERRY_QNX__ HAVE_OPENGLES \
+ PACKAGE_VERSION=\"0.9.8.4\" HAVE_OPENGLES2 HAVE_NULLINPUT \
+ HAVE_AL HAVE_THREADS WANT_MINIZ HAVE_OVERLAY HAVE_GLSL \
+ USING_GL20 HAVE_OPENGL __STDC_CONSTANT_MACROS HAVE_BB10
+
+INCLUDEPATH += ../../../../RetroArch
+
+QMAKE_CXXFLAGS +=
+QMAKE_CFLAGS += -Wc,-std=gnu99 -marm -mfpu=neon
+
+SOURCES += ../../../griffin/griffin.c \
+ ../../../audio/sinc_neon.S \
+ ../../../audio/utils_neon.S
+
+include(config.pri)
diff --git a/blackberry-qnx/bb10/assets/MainMenu.qml b/blackberry-qnx/bb10/assets/MainMenu.qml
new file mode 100644
index 0000000000..4ee3b9aeaf
--- /dev/null
+++ b/blackberry-qnx/bb10/assets/MainMenu.qml
@@ -0,0 +1,108 @@
+import bb.cascades 1.0
+import bb.cascades.pickers 1.0
+
+Page {
+ actions: [
+ ActionItem {
+ title: "Play"
+ ActionBar.placement: ActionBarPlacement.OnBar
+ imageSource: "asset:///images/open.png"
+ onTriggered: {
+ if(RetroArch.rom == "" || RetroArch.core == "")
+ {
+ //Do something to focus on select rom box
+ }
+ else
+ {
+ RetroArch.startEmulator();
+ }
+ }
+ }
+ ]
+
+ titleBar: TitleBar {
+ id: titleBar
+ title: "RetroArch"
+ }
+
+ Container {
+ horizontalAlignment: HorizontalAlignment.Fill
+ verticalAlignment: VerticalAlignment.Fill
+ rightPadding: 20
+ leftPadding: 20
+
+ layout: DockLayout {}
+
+ Container {
+ preferredWidth: 680
+ horizontalAlignment: HorizontalAlignment.Center
+ verticalAlignment: VerticalAlignment.Center
+
+ ImageView
+ {
+ horizontalAlignment: HorizontalAlignment.Center
+ imageSource: "asset:///images/icon.png"
+ preferredWidth: 200
+ preferredHeight: 200
+ }
+
+ DropDown
+ {
+ id: _core
+ objectName: "dropdown_core"
+ horizontalAlignment: HorizontalAlignment.Center
+ title: "Core Selection"
+ //Handled in C++
+ }
+
+ Container {
+ horizontalAlignment: HorizontalAlignment.Center
+ preferredWidth: 680
+
+ layout: StackLayout {
+ orientation: LayoutOrientation.LeftToRight
+ }
+
+ //I like the look as a textbox
+ DropDown
+ {
+ id: romName
+ verticalAlignment: VerticalAlignment.Center
+ horizontalAlignment: HorizontalAlignment.Center
+ preferredWidth: 600
+ enabled: false
+ title: if(picker.selectedFile)
+ picker.selectedFile
+ else
+ "Rom Selection"
+ }
+
+ ImageButton {
+ horizontalAlignment: HorizontalAlignment.Right
+ defaultImageSource: "asset:///images/file.png"
+ onClicked: {
+ picker.open();
+ }
+ }
+ }
+ }
+ }
+ attachedObjects: [
+ FilePicker {
+ id: picker
+
+ property string selectedFile
+
+ title: "Rom Selector"
+ filter: { RetroArch.romExtensions.split("|") }
+ type: FileType.Other
+ directories: ["/accounts/1000/shared/documents/roms"]
+
+ onFileSelected: {
+ RetroArch.rom = selectedFiles[0];
+ selectedFile = RetroArch.rom.substr(RetroArch.rom.lastIndexOf('/')+1);
+ picker.directories = [RetroArch.rom.substr(0, RetroArch.rom.lastIndexOf('/'))];
+ }
+ }
+ ]
+}
diff --git a/blackberry-qnx/bb10/assets/coreInfo.json b/blackberry-qnx/bb10/assets/coreInfo.json
new file mode 100644
index 0000000000..2da92d8b12
--- /dev/null
+++ b/blackberry-qnx/bb10/assets/coreInfo.json
@@ -0,0 +1,42 @@
+{
+ "snes9x_next_libretro.so":{
+ "display_name":"SNES / Super Famicom",
+ "supported_extensions":"*.smc|*.fig|*.sfc|*.gd3|*.gd7|*.dx2|*.bsx|*.swc",
+ "corename":"SNES9x Next",
+ "manufacturer":"Nintendo",
+ "systemname":"Super Nintendo Entertainment System",
+ "default_overlay":"app/native/overlays/snes-landscape.cfg"
+ },
+ "genesis_plus_gx_libretro.so":{
+ "display_name":"Sega (MS/GG/MD/CD)",
+ "supported_extensions":"*.md|*.smd|*.gen|*.sms|*.gg|*.sg|*.bin|*.cue|*.ios",
+ "corename":"Genesis Plus GX",
+ "manufacturer":"Sega",
+ "systemname":"Sega (Various)",
+ "default_overlay":"app/native/overlays/genesis6-landscape.cfg"
+ },
+ "vba_next_libretro.so":{
+ "display_name":"Game Boy Advance",
+ "supported_extensions":"*.gba",
+ "corename":"VBA Next",
+ "manufacturer":"Nintendo",
+ "systemname":"Game Boy Advance",
+ "default_overlay":"app/native/overlays/box-gba.cfg"
+ },
+ "pcsx_rearmed_libretro.so":{
+ "display_name":"PlayStation1",
+ "supported_extensions":"*.bin|*.cue|*.img|*.mdf|*.pbp|*.cbn|*.toc",
+ "corename":"PCSX ReARMed",
+ "manufacturer":"Sony",
+ "systemname":"PlayStation",
+ "default_overlay":"app/native/overlays/psx-landscape.cfg"
+ },
+ "fb_alpha_libretro.so":{
+ "display_name":"Arcade",
+ "supported_extensions":"*.zip|*.ZIP",
+ "corename":"Final Burn Alpha",
+ "manufacturer":"Various",
+ "systemname":"Arcade (various)",
+ "default_overlay":"app/native/overlays/snes-landscape.cfg"
+ }
+}
diff --git a/blackberry-qnx/bb10/assets/images/file.png b/blackberry-qnx/bb10/assets/images/file.png
new file mode 100644
index 0000000000..cd10d50581
Binary files /dev/null and b/blackberry-qnx/bb10/assets/images/file.png differ
diff --git a/playbook/icon.png b/blackberry-qnx/bb10/assets/images/icon.png
similarity index 100%
rename from playbook/icon.png
rename to blackberry-qnx/bb10/assets/images/icon.png
diff --git a/blackberry-qnx/bb10/assets/images/open.png b/blackberry-qnx/bb10/assets/images/open.png
new file mode 100644
index 0000000000..931936bf79
Binary files /dev/null and b/blackberry-qnx/bb10/assets/images/open.png differ
diff --git a/blackberry-qnx/bb10/assets/main.qml b/blackberry-qnx/bb10/assets/main.qml
new file mode 100644
index 0000000000..ab8cd70a1c
--- /dev/null
+++ b/blackberry-qnx/bb10/assets/main.qml
@@ -0,0 +1,11 @@
+import bb.cascades 1.0
+import bb.cascades.pickers 1.0
+
+TabbedPane {
+ Tab {
+ MainMenu
+ {
+
+ }
+ }
+}
diff --git a/blackberry-qnx/bb10/bar-descriptor.xml b/blackberry-qnx/bb10/bar-descriptor.xml
new file mode 100644
index 0000000000..e04a5c2f4d
--- /dev/null
+++ b/blackberry-qnx/bb10/bar-descriptor.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+ com.example.RetroArch
+
+
+ RetroArch
+
+
+ 1.0.0
+
+
+ 1
+
+
+
+
+
+
+ true
+ none
+ false
+
+
+
+ core.games
+
+ armle-v7
+ RetroArch-Cascades
+
+
+ Qnx/Cascades
+ armle-v7
+ RetroArch-Cascades.so
+
+
+ armle-v7
+ RetroArch-Cascades
+
+
+
+
+
+ icon.png
+
+
+
+
+
+
+
+
+
+ retroarch.cfg
+ lib
+ overlays
+ assets
+ icon.png
+
+
+
+ dark
+
+
+ run_native
+ access_shared
+
+
+
+
diff --git a/blackberry-qnx/bb10/config.pri b/blackberry-qnx/bb10/config.pri
new file mode 100644
index 0000000000..4abec4b0da
--- /dev/null
+++ b/blackberry-qnx/bb10/config.pri
@@ -0,0 +1,46 @@
+# Auto-generated by IDE. Changes by user will be lost!
+BASEDIR = $$quote($$_PRO_FILE_PWD_)
+
+device {
+ CONFIG(debug, debug|release) {
+ SOURCES += $$quote($$BASEDIR/src/RetroArch-Cascades.cpp) \
+ $$quote($$BASEDIR/src/main.cpp)
+
+ HEADERS += $$quote($$BASEDIR/src/RetroArch-Cascades.h)
+
+ }
+
+ CONFIG(release, debug|release) {
+ SOURCES += $$quote($$BASEDIR/src/RetroArch-Cascades.cpp) \
+ $$quote($$BASEDIR/src/main.cpp)
+
+ HEADERS += $$quote($$BASEDIR/src/RetroArch-Cascades.h)
+
+ }
+
+}
+
+simulator {
+ CONFIG(debug, debug|release) {
+ SOURCES += $$quote($$BASEDIR/src/RetroArch-Cascades.cpp) \
+ $$quote($$BASEDIR/src/main.cpp)
+
+ HEADERS += $$quote($$BASEDIR/src/RetroArch-Cascades.h)
+
+ }
+
+}
+
+INCLUDEPATH += $$quote($$BASEDIR/src)
+
+CONFIG += precompile_header
+
+PRECOMPILED_HEADER = $$quote($$BASEDIR/precompiled.h)
+
+lupdate_inclusion {
+ SOURCES += $$quote($$BASEDIR/../assets/*.qml)
+
+}
+
+TRANSLATIONS = $$quote($${TARGET}.ts)
+
diff --git a/blackberry-qnx/bb10/precompiled.h b/blackberry-qnx/bb10/precompiled.h
new file mode 100644
index 0000000000..6213dc4ba7
--- /dev/null
+++ b/blackberry-qnx/bb10/precompiled.h
@@ -0,0 +1,2 @@
+// This file is used to store precompiled headers.
+// It is intentionally left blank. It is up to you to decide which headers should be included here.
diff --git a/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp b/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp
new file mode 100644
index 0000000000..86f612013c
--- /dev/null
+++ b/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp
@@ -0,0 +1,310 @@
+/* Copyright (c) 2012 Research In Motion Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "RetroArch-Cascades.h"
+#include "general.h"
+#include "conf/config_file.h"
+#include "file.h"
+
+#ifdef HAVE_RGUI
+#include "frontend/menu/rgui.h"
+#endif
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+using namespace bb::cascades;
+using namespace bb::data;
+
+//Use after calling findCores
+#define GET_CORE_INFO(x, y) coreInfo[coreList[x]].toMap()[y].toString()
+
+RetroArch::RetroArch()
+{
+ qmlRegisterType("bb.cascades.pickers", 1, 0, "FilePicker");
+ qmlRegisterUncreatableType("bb.cascades.pickers", 1, 0, "FileType", "");
+
+ // Create channel to signal threads on
+ chid = ChannelCreate(0);
+ coid = ConnectAttach(0, 0, chid, _NTO_SIDE_CHANNEL, 0);
+
+ bool res = connect(
+ OrientationSupport::instance(), SIGNAL(rotationCompleted()),
+ this, SLOT(onRotationCompleted()));
+
+ rarch_main_clear_state();
+
+ strlcpy(g_settings.libretro, "app/native/lib", sizeof(g_settings.libretro));
+ coreSelectedIndex = -1;
+
+ QmlDocument *qml = QmlDocument::create("asset:///main.qml");
+
+ if (!qml->hasErrors())
+ {
+ qml->setContextProperty("RetroArch", this);
+
+ AbstractPane *mAppPane = qml->createRootObject();
+
+ if (mAppPane)
+ {
+ //Get core DropDown reference to populate it in C++
+ coreSelection = mAppPane->findChild("dropdown_core");
+ connect(coreSelection, SIGNAL(selectedValueChanged(QVariant)), this, SLOT(onCoreSelected(QVariant)));
+ findCores();
+
+ Application::instance()->setScene(mAppPane);
+
+ // Start the thread in which we render to the custom window.
+ start();
+ }
+ }
+}
+
+RetroArch::~RetroArch()
+{
+ free(coreList);
+}
+
+void RetroArch::aboutToQuit()
+{
+ recv_msg msg;
+
+ msg.code = RETROARCH_EXIT;
+
+ MsgSend(coid, (void*)&msg, sizeof(msg), (void*)NULL, 0);
+
+ wait();
+}
+
+extern screen_window_t screen_win;
+extern screen_context_t screen_ctx;
+void RetroArch::run()
+{
+ int rcvid = -1;
+ recv_msg msg;
+
+ while (true) {
+ rcvid = MsgReceive(chid, &msg, sizeof(msg), 0);
+
+ if (rcvid > 0)
+ {
+ switch (msg.code)
+ {
+ case RETROARCH_START_REQUESTED:
+ {
+ printf("RetroArch Started Received\n");fflush(stdout);
+
+ MsgReply(rcvid,0,NULL,0);
+
+ screen_create_context(&screen_ctx, 0);
+
+ bps_initialize();
+
+ if (screen_request_events(screen_ctx) != BPS_SUCCESS)
+ {
+ RARCH_ERR("screen_request_events failed.\n");
+ }
+
+ if (navigator_request_events(0) != BPS_SUCCESS)
+ {
+ RARCH_ERR("navigator_request_events failed.\n");
+ }
+
+ if (navigator_rotation_lock(false) != BPS_SUCCESS)
+ {
+ RARCH_ERR("navigator_location_lock failed.\n");
+ }
+
+ screen_create_window_type(&screen_win, screen_ctx, SCREEN_CHILD_WINDOW);
+
+ screen_join_window_group(screen_win, Application::instance()->mainWindow()->groupId().toAscii().constData());
+
+ char *win_id = "RetroArch_Emulator_Window";
+ screen_set_window_property_cv(screen_win, SCREEN_PROPERTY_ID_STRING, strlen(win_id), win_id);
+
+ int z = 10;
+ if (screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_ZORDER, &z) != 0) {
+ return;
+ }
+
+ initRASettings();
+
+ rarch_main(0, NULL);
+ break;
+ }
+ case RETROARCH_EXIT:
+ MsgReply(rcvid,0,NULL,0);
+ goto exit;
+ default:
+ break;
+ }
+ }
+ }
+ exit:
+ return;
+}
+
+
+/*
+ * Properties
+ */
+QString RetroArch::getRom()
+{
+ return rom;
+}
+
+void RetroArch::setRom(QString rom)
+{
+ this->rom = rom;
+}
+
+QString RetroArch::getCore()
+{
+ return core;
+}
+
+void RetroArch::setCore(QString core)
+{
+ this->core = core;
+}
+
+QString RetroArch::getRomExtensions()
+{
+ return romExtensions;
+}
+
+/*
+ * Slots
+ */
+void RetroArch::onRotationCompleted()
+{
+ if (OrientationSupport::instance()->orientation() == UIOrientation::Landscape)
+ {
+ if (state == RETROARCH_START_REQUESTED)
+ {
+ startEmulator();
+ }
+ }
+}
+
+void RetroArch::onCoreSelected(QVariant value)
+{
+ coreSelectedIndex = value.toInt();
+
+ core.clear();
+ core.append("app/native/lib/");
+ core.append(coreList[coreSelectedIndex]);
+ emit coreChanged(core);
+
+ romExtensions = GET_CORE_INFO(coreSelectedIndex, "supported_extensions");
+ emit romExtensionsChanged(romExtensions);
+
+ qDebug() << "Core Selected: " << core;
+ qDebug() << "Supported Extensions: " << romExtensions;
+}
+
+/*
+ * Functions
+ */
+void RetroArch::startEmulator()
+{
+ state = RETROARCH_START_REQUESTED;
+
+ if (OrientationSupport::instance()->orientation() == UIOrientation::Portrait)
+ {
+ OrientationSupport::instance()->setSupportedDisplayOrientation(SupportedDisplayOrientation::DisplayLandscape);
+ }
+ else
+ {
+ recv_msg msg;
+ msg.code = RETROARCH_START_REQUESTED;
+
+ MsgSend(coid, (void*)&msg, sizeof(msg), (void*)NULL, 0);
+
+ state = RETROARCH_RUNNING;
+ }
+}
+
+void RetroArch::findCores()
+{
+ DIR *dirp;
+ struct dirent* direntp;
+ int count=0, i=0;
+
+ dirp = opendir(g_settings.libretro);
+ if( dirp != NULL ) {
+ for(;;) {
+ direntp = readdir( dirp );
+ if( direntp == NULL ) break;
+ count++;
+ }
+ fflush(stdout);
+ rewinddir(dirp);
+
+ if(count==2){
+ printf("No Cores Found");fflush(stdout);
+ }
+
+ coreList = (char**)malloc(count*sizeof(char*));
+ count = 0;
+
+ for(;;){
+ direntp = readdir( dirp );
+ if( direntp == NULL ) break;
+ coreList[count++] = strdup((char*)direntp->d_name);
+ }
+
+ //Load info for Cores
+ JsonDataAccess jda;
+
+ coreInfo = jda.load("app/native/assets/coreInfo.json").toMap();
+
+ Option *tmp;
+
+ //Populate DropDown
+ for (i = 2; i < count; ++i)
+ {
+ qDebug() << GET_CORE_INFO(i, "display_name");
+
+ tmp = Option::create().text(GET_CORE_INFO(i, "display_name"))
+ .value(i);
+
+ coreSelection->add(tmp);
+ }
+ }
+
+ closedir(dirp);
+}
+
+void RetroArch::initRASettings()
+{
+ strlcpy(g_settings.libretro,(char *)core.toAscii().constData(), sizeof(g_settings.libretro));
+ strlcpy(g_extern.fullpath, (char *)rom.toAscii().constData(), sizeof(g_extern.fullpath));
+ strlcpy(g_settings.input.overlay, GET_CORE_INFO(coreSelectedIndex, "default_overlay").toAscii().constData(), sizeof(g_settings.input.overlay));
+}
+
diff --git a/blackberry-qnx/bb10/src/RetroArch-Cascades.h b/blackberry-qnx/bb10/src/RetroArch-Cascades.h
new file mode 100644
index 0000000000..aa58391922
--- /dev/null
+++ b/blackberry-qnx/bb10/src/RetroArch-Cascades.h
@@ -0,0 +1,87 @@
+#ifndef _RETROARCHCASCADES_H_
+#define _RETROARCHCASCADES_H_
+
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+using namespace bb::cascades;
+
+namespace bb
+{
+ namespace cascades
+ {
+ class Page;
+ }
+}
+
+class RetroArch: public QThread
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString rom READ getRom WRITE setRom NOTIFY romChanged)
+ Q_PROPERTY(QString core READ getCore WRITE setCore NOTIFY coreChanged)
+ Q_PROPERTY(QString romExtensions READ getRomExtensions NOTIFY romExtensionsChanged)
+
+public:
+ RetroArch();
+ ~ RetroArch();
+
+ Q_INVOKABLE void startEmulator();
+ Q_INVOKABLE void findCores();
+
+signals:
+ void romChanged(QString);
+ void coreChanged(QString);
+ void romExtensionsChanged(QString);
+
+public slots:
+ void aboutToQuit();
+ void onRotationCompleted();
+ void onCoreSelected(QVariant);
+
+private:
+ /**
+ * This QThread-run function runs the custom window rendering in a separate thread to avoid lag
+ * in the rest of the Cascades UI.
+ */
+ void run();
+
+ QString rom;
+ QString getRom();
+ void setRom(QString rom);
+
+ QString core;
+ QString getCore();
+ void setCore(QString core);
+
+ QString romExtensions;
+ QString getRomExtensions();
+
+ void initRASettings();
+
+ int chid, coid;
+ int state;
+ DropDown *coreSelection;
+ QVariantMap coreInfo;
+ char **coreList;
+ int coreSelectedIndex;
+};
+
+enum {
+ RETROARCH_RUNNING,
+ RETROARCH_START_REQUESTED,
+ RETROARCH_EXIT
+};
+
+
+typedef union {
+ _pulse pulse;
+ int code;
+} recv_msg;
+
+#endif
diff --git a/blackberry-qnx/bb10/src/main.cpp b/blackberry-qnx/bb10/src/main.cpp
new file mode 100644
index 0000000000..1f9cd50ca1
--- /dev/null
+++ b/blackberry-qnx/bb10/src/main.cpp
@@ -0,0 +1,37 @@
+/* Copyright (c) 2012 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#include "RetroArch-Cascades.h"
+#include
+
+using ::bb::cascades::Application;
+
+Q_DECL_EXPORT int main(int argc, char **argv)
+{
+ // Instantiate the main application constructor.
+ Application app(argc, argv);
+
+ // Initialize our application.
+ RetroArch mainApp;
+
+ QObject::connect(&app, SIGNAL( aboutToQuit() ), &mainApp, SLOT( aboutToQuit() ));
+
+ // We complete the transaction started in the main application constructor and start the
+ // client event loop here. When loop is exited the Application deletes the scene which
+ // deletes all its children.
+ return Application::exec();
+}
+
diff --git a/blackberry-qnx/bb10/translations/Makefile b/blackberry-qnx/bb10/translations/Makefile
new file mode 100644
index 0000000000..0678149585
--- /dev/null
+++ b/blackberry-qnx/bb10/translations/Makefile
@@ -0,0 +1,12 @@
+QMAKE_TARGET = RetroArch-Cascades
+LUPDATE = $(QNX_HOST)/usr/bin/lupdate
+LRELEASE = $(QNX_HOST)/usr/bin/lrelease
+
+update: $(QMAKE_TARGET).pro FORCE
+ $(LUPDATE) $(QMAKE_TARGET).pro
+
+release: $(QMAKE_TARGET).pro $(QMAKE_TARGET).ts
+ $(LRELEASE) $(QMAKE_TARGET).pro
+
+FORCE:
+
diff --git a/blackberry-qnx/bb10/translations/RetroArch-Cascades.pro b/blackberry-qnx/bb10/translations/RetroArch-Cascades.pro
new file mode 100644
index 0000000000..d79bf91ecd
--- /dev/null
+++ b/blackberry-qnx/bb10/translations/RetroArch-Cascades.pro
@@ -0,0 +1 @@
+include (../RetroArch-Cascades.pro)
diff --git a/blackberry-qnx/bb10/translations/RetroArch-Cascades.ts b/blackberry-qnx/bb10/translations/RetroArch-Cascades.ts
new file mode 100644
index 0000000000..07a7469f10
--- /dev/null
+++ b/blackberry-qnx/bb10/translations/RetroArch-Cascades.ts
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/playbook/.cproject b/blackberry-qnx/playbook/.cproject
similarity index 97%
rename from playbook/.cproject
rename to blackberry-qnx/playbook/.cproject
index e05b378da3..551d5853f3 100644
--- a/playbook/.cproject
+++ b/blackberry-qnx/playbook/.cproject
@@ -26,9 +26,9 @@
-
+
+
+
+
+
+
+
@@ -143,7 +149,7 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+