#include <QMenu>
#include <QMenuBar>
+#include <QToolBar>
#include <QString>
#include <QFileDialog>
#include <QPushButton>
screen->setColor(1, qRgb(212,212,212));
screen->setColor(0, qRgb(255,255,255));
- createMenu();
- resize(640,480);
- centralWindow = new QLabel(this);
- setCentralWidget(centralWindow);
-
emuThread = new QtBoiEmuThread(this);
emuThread->start();
+ loadROM = new QAction(tr("&Load ROM..."), this);
+ quit = new QAction(tr("&Quit"), this);
+ emulatorPause = new QAction(tr("&Pause"), this);
+ emulatorCont = new QAction(tr("&Go"), this);
+ emulatorStop = new QAction(tr("&Stop"), this);
+ emulatorStep = new QAction(tr("St&ep"), this);
+ emulatorReset = new QAction(tr("&Reset"), this);
+
+ loadROM->setShortcut(QKeySequence(tr("Ctrl+O", "File|Load ROM...")));
+ emulatorCont->setShortcut(QKeySequence(tr("F5", "Emulator|Go")));
+ emulatorStep->setShortcut(QKeySequence(tr("F7", "Debug|Step")));
+ //emulatorCont->setIcon(QIcon("../icons/player_play.svg"));
+ //emulatorPause->setIcon(QIcon("../icons/player_pause.svg"));
+ //loadROM->setIcon(QIcon("../icons/player_eject.svg"));
+
+ createMenu();
+ createToolbar();
+
+
connect(emulatorCont, SIGNAL(triggered()), emuThread, SLOT(cont()));
connect(emulatorStop, SIGNAL(triggered()), emuThread, SLOT(stop()));
connect(emulatorPause, SIGNAL(triggered()), emuThread, SLOT(pause()));
connect(emulatorReset, SIGNAL(triggered()), emuThread, SLOT(reset()));
connect(emuThread, SIGNAL(redraw(const uchar*)), this, SLOT(onRedraw(const uchar*)));
+ resize(640,480);
+ centralWindow = new QLabel(this);
+ setCentralWidget(centralWindow);
+ centralWindow->move(0,0);
}
QtBoiMainWindow::~QtBoiMainWindow()
void QtBoiMainWindow::createMenu()
{
- loadROM = new QAction("&Load ROM...", this);
- quit = new QAction("&Quit", this);
- emulatorPause = new QAction("&Pause", this);
- emulatorCont = new QAction("&Go", this);
- emulatorStop = new QAction("&Stop", this);
- emulatorStep = new QAction("St&ep", this);
- emulatorReset = new QAction("&Reset", this);
-
-
QMenu *file;
- file = menuBar()->addMenu("&File");
+ file = menuBar()->addMenu(tr("&File"));
file->addAction(loadROM);
file->addAction(quit);
QMenu *emulator;
- emulator = menuBar()->addMenu("&Emulator");
+ emulator = menuBar()->addMenu(tr("&Emulator"));
emulator->addAction(emulatorCont);
emulator->addAction(emulatorPause);
emulator->addAction(emulatorStop);
emulator->addAction(emulatorReset);
QMenu *debug;
- debug = menuBar()->addMenu("&Debug");
+ debug = menuBar()->addMenu(tr("&Debug"));
debug->addAction(emulatorStep);
connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
connect(loadROM, SIGNAL(triggered()), this, SLOT(onLoadROM()));
}
+void QtBoiMainWindow::createToolbar()
+{
+ QToolBar *toolbar;
+ toolbar = addToolBar(tr("&Emulator"));
+ toolbar->addAction(loadROM);
+ toolbar->addAction(emulatorCont);
+ toolbar->addAction(emulatorPause);
+ toolbar->addAction(emulatorReset);
+}
+
void QtBoiMainWindow::onLoadROM()
{
QString filename = QFileDialog::getOpenFileName(this, tr("Load ROM"), "../roms", tr("GameBoy ROMs (*.gb *.gbc)"));
centralWindow->setPixmap(QPixmap::fromImage(screen->scaled(320,288)));
}
+void QtBoiMainWindow::keyPressEvent(QKeyEvent *event)
+{
+ if (emuThread->isPaused) {
+ QMainWindow::keyPressEvent(event);
+ return;
+ }
+ switch(event->key())
+ {
+ case Qt::Key_Up:
+ emuThread->pressControl(GameBoy::PAD_UP);
+ break;
+ case Qt::Key_Down:
+ emuThread->pressControl(GameBoy::PAD_DOWN);
+ break;
+ case Qt::Key_Left:
+ emuThread->pressControl(GameBoy::PAD_LEFT);
+ break;
+ case Qt::Key_Right:
+ emuThread->pressControl(GameBoy::PAD_RIGHT);
+ break;
+ case Qt::Key_Z:
+ emuThread->pressControl(GameBoy::BUTTON_A);
+ break;
+ case Qt::Key_X:
+ emuThread->pressControl(GameBoy::BUTTON_B);
+ break;
+ case Qt::Key_Return:
+ emuThread->pressControl(GameBoy::BUTTON_SELECT);
+ break;
+ case Qt::Key_Space:
+ emuThread->pressControl(GameBoy::BUTTON_START);
+ break;
+ default:
+ QMainWindow::keyPressEvent(event);
+ }
+}
+
+void QtBoiMainWindow::keyReleaseEvent(QKeyEvent *event)
+{
+ if (emuThread->isPaused) {
+ QMainWindow::keyReleaseEvent(event);
+ return;
+ }
+ switch(event->key())
+ {
+ case Qt::Key_Up:
+ emuThread->releaseControl(GameBoy::PAD_UP);
+ break;
+ case Qt::Key_Down:
+ emuThread->releaseControl(GameBoy::PAD_DOWN);
+ break;
+ case Qt::Key_Left:
+ emuThread->releaseControl(GameBoy::PAD_LEFT);
+ break;
+ case Qt::Key_Right:
+ emuThread->releaseControl(GameBoy::PAD_RIGHT);
+ break;
+ case Qt::Key_Z:
+ emuThread->releaseControl(GameBoy::BUTTON_A);
+ break;
+ case Qt::Key_X:
+ emuThread->releaseControl(GameBoy::BUTTON_B);
+ break;
+ case Qt::Key_Return:
+ emuThread->releaseControl(GameBoy::BUTTON_SELECT);
+ break;
+ case Qt::Key_Space:
+ emuThread->releaseControl(GameBoy::BUTTON_START);
+ break;
+ default:
+ QMainWindow::keyReleaseEvent(event);
+ }
+}
+