#include "player.h"
#include "viewport.h"
#include <QFileDialog>
ax::Player::Player(const char* filename) {
setContentsMargins(1, 0, 1, 1);
setWindowTitle("Axal");
auto viewport = new Viewport(this);
setCentralWidget(viewport);
_runtime.core_load(viewport, filename);
axal_info info;
_runtime.get_info(&info);
resize(info.min_width, info.min_height);
viewport->setPixelFormat(info.pixel_format);
_runtime.set_video_refresh(&Viewport::_video_refresh);
_action_open = new QAction("&Open...", this);
_action_open->setShortcut(Qt::CTRL + Qt::Key_O);
connect(_action_open, &QAction::triggered, this, [this] {
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::ExistingFile);
dialog.setViewMode(QFileDialog::Detail);
if (dialog.exec()) {
auto filenames = dialog.selectedFiles();
if (filenames.size() > 0) {
auto filename = filenames.at(0);
if (_runtime.is_loaded()) {
_runtime.pause();
_runtime.rom_insert(filename.toUtf8().constData());
_runtime.reset();
_runtime.resume();
this->viewport().setViewportVisible(true);
_action_reset->setEnabled(true);
_action_close->setEnabled(true);
}
}
}
});
_action_reset = new QAction("&Reset", this);
_action_reset->setShortcut(Qt::CTRL + Qt::Key_R);
_action_reset->setEnabled(false);
connect(_action_reset, &QAction::triggered, this, [this] {
if (_runtime.is_loaded() && _runtime.is_running()) {
_runtime.pause();
_runtime.reset();
_runtime.resume();
}
});
_action_close = new QAction("&Close", this);
_action_close->setShortcut(Qt::CTRL + Qt::Key_W);
_action_close->setEnabled(false);
connect(_action_close, &QAction::triggered, this, [this] {
if (_runtime.is_loaded() && _runtime.is_running()) {
_runtime.pause();
_runtime.rom_remove();
this->viewport().setViewportVisible(false);
_action_reset->setEnabled(false);
_action_close->setEnabled(false);
}
});
auto menu_file = menuBar()->addMenu("&File");
menu_file->addAction(_action_open);
menu_file->addSeparator();
menu_file->addAction(_action_reset);
menu_file->addSeparator();
menu_file->addAction(_action_close);
}
ax::Player::~Player() noexcept {
}
auto ax::Player::viewport() noexcept -> Viewport& {
return *((Viewport*)centralWidget());
}
void ax::Player::resize(unsigned w, unsigned h) {
auto width = (w * 10) + 2;
auto height = (h * 10) + 1;
QMainWindow::resize(width, height);
setMinimumWidth(width);
setMaximumWidth(width);
setMinimumHeight(height);
setMaximumHeight(height);
}