Play-/Source/ui_unix/mainwindow.cpp

128 lines
3.2 KiB
C++
Raw Normal View History

2016-09-06 00:12:56 +01:00
#include "mainwindow.h"
#include <QFileDialog>
#include "global.h"
#include "GSH_OpenGLUnix.h"
#undef None
2016-09-06 00:12:56 +01:00
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
WId MainWindow::getOpenGLPanel()
{
return ui->openGLWidget->winId();
}
2016-09-06 00:12:56 +01:00
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initEmu(){
g_virtualMachine = new CPS2VM();
g_virtualMachine->Initialize();
g_virtualMachine->CreateGSHandler(CGSH_OpenGLUnix::GetFactoryFunction(getOpenGLPanel()));
2016-07-26 00:52:31 +01:00
g_virtualMachine->CreatePadHandler(CPH_HidUnix::GetFactoryFunction());
padhandler = static_cast<CPH_HidUnix*>(g_virtualMachine->GetPadHandler());
}
void MainWindow::setOpenGlPanelSize()
2016-09-06 00:12:56 +01:00
{
on_openGLWidget_resized();
}
void MainWindow::on_openGLWidget_resized()
{
if (g_virtualMachine != nullptr && g_virtualMachine->m_ee != nullptr && g_virtualMachine->m_ee->m_gs != nullptr )
{
GLint w = ui->openGLWidget->size().width(), h = ui->openGLWidget->size().height();
CGSHandler::PRESENTATION_PARAMS presentationParams;
presentationParams.mode = (CGSHandler::PRESENTATION_MODE)CAppConfig::GetInstance().GetPreferenceInteger(PREF_CGSHANDLER_PRESENTATION_MODE);
presentationParams.windowWidth = w;
presentationParams.windowHeight = h;
g_virtualMachine->m_ee->m_gs->SetPresentationParams(presentationParams);
g_virtualMachine->m_ee->m_gs->Flip();
}
}
void MainWindow::on_actionOpen_Game_triggered()
{
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::ExistingFile);
dialog.setNameFilter(tr("ISO/CSO/ISZ files (*.iso *cso *.isz)"));
if (dialog.exec())
{
auto fileName = dialog.selectedFiles().first();
CAppConfig::GetInstance().SetPreferenceString(PS2VM_CDROM0PATH, fileName.toStdString().c_str());
}
}
void MainWindow::on_actionStart_Game_triggered()
{
if (g_virtualMachine != nullptr)
{
g_virtualMachine->Pause();
g_virtualMachine->Reset();
g_virtualMachine->m_ee->m_os->BootFromCDROM();
g_virtualMachine->Resume();
setOpenGlPanelSize();
}
}
void MainWindow::on_actionBoot_ELF_triggered()
{
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::ExistingFile);
dialog.setNameFilter(tr("ELF files (*.elf)"));
if (dialog.exec())
{
if (g_virtualMachine != nullptr)
{
auto fileName = dialog.selectedFiles().first();
g_virtualMachine->Pause();
g_virtualMachine->Reset();
g_virtualMachine->m_ee->m_os->BootFromFile(fileName.toStdString().c_str());
g_virtualMachine->Resume();
setOpenGlPanelSize();
}
}
}
void MainWindow::on_actionExit_triggered()
{
if (g_virtualMachine != nullptr)
{
g_virtualMachine->Pause();
g_virtualMachine->DestroySoundHandler();
}
exit(0);
2016-09-06 00:12:56 +01:00
}
2016-07-26 00:52:31 +01:00
void MainWindow::keyPressEvent(QKeyEvent *event)
{
if (padhandler != nullptr)
padhandler->InputValueCallbackPressed(event->key());
}
void MainWindow::keyReleaseEvent(QKeyEvent *event)
{
if (padhandler != nullptr)
padhandler->InputValueCallbackReleased(event->key());
}