launch/mainwindow.cpp

267 lines
6.1 KiB
C++
Raw Normal View History

#include <Qt>
#include <QProcess>
#ifdef Q_OS_WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shlobj.h>
#endif
#include "mainwindow.h"
#include "ui_mainwindow.h"
ioLaunch::ioLaunch(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::ioLaunch),
ioWidth(0), ioHeight(0), ioWedited(false), ioHedited(false)
{
ui->setupUi(this);
resOption = "";
screenOption = "";
// Calculate ioquake3 home path.
#ifdef Q_OS_WIN32
wchar_t path[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, path)))
{
homePath = QString::fromWCharArray(path) + "/Quake3";
}
#elif defined(Q_OS_MAC) || defined(Q_OS_UNIX)
const QByteArray homeEnvRaw = qgetenv("HOME");
const QString homeEnv(homeEnvRaw.constData());
#if defined Q_OS_MAC
homePath = homeEnv + "/Library/Application Support/Quake3";
#elif defined Q_OS_UNIX
homePath = homeEnv + "/.q3a";
#endif
#endif
}
ioLaunch::~ioLaunch()
{
delete ui;
}
void ioLaunch::on_btnLaunch_clicked()
{
QString ioq3;
#ifdef Q_OS_WIN32
// Prompt the user to set the ioq3 path if the settings value either doesn't exist or is invalid.
bool promptForPath = true;
if (settings.containsQuakePath())
{
const QString path = settings.getQuakePath();
const QDir dir(path);
if (!path.isEmpty() && dir.exists())
promptForPath = false;
}
if(promptForPath)
{
msg.setText("Please select your Quake3 directory");
msg.exec();
const QString path = QFileDialog::getExistingDirectory (this, tr("Directory"));
if (path.isEmpty())
return;
settings.setQuakePath(path);
}
ioq3 = QString("\"") + settings.getQuakePath() + "/ioquake3.x86.exe\" +set r_mode -1";
2013-12-02 01:50:15 +00:00
#elif defined Q_OS_MAC
ioq3 = "open -a ioquake3 --args +set r_mode -1";
#elif defined Q_OS_UNIX
ioq3 = "ioquake3 +set r_mode -1";
#else
#error "Unsupported platform"
#endif
if(ioWedited == true && ioHedited == true)
{
resOption = " +set r_customwidth " + QString::number(ioWidth) + " +set r_customheight " + QString::number(ioHeight);
}
if(resOption == NULL)
{
resOption = "";
}
if(screenOption == NULL)
{
screenOption = "";
}
if(!QProcess::startDetached(ioq3+resOption+screenOption))
{
ioq3Failed.setText("ioquake3 failed to start!\nIs it installed?\n");
ioq3Failed.exec();
}
}
2014-05-08 11:38:50 +00:00
void ioLaunch::on_cbResolution_highlighted(int /*index*/)
{
ioWedited = false;
ioHedited = false;
}
void ioLaunch::on_cbResolution_currentIndexChanged(int index)
{
ioWedited = false;
ioHedited = false;
switch(index)
{
case 0:
{
resOption = "";
break;
}
case 1:
{
ioWidth = QApplication::desktop()->screenGeometry().width();
ioHeight = QApplication::desktop()->screenGeometry().height();
resOption = " +set r_customwidth " + QString::number(ioWidth) + " +set r_customheight " + QString::number(ioHeight);
break;
}
case 2:
{
resOption = " +set r_customwidth 320 +set r_customheight 240";
break;
}
case 3:
{
resOption = " +set r_customwidth 400 +set r_customheight 300";
break;
}
case 4:
{
resOption = " +set r_customwidth 512 +set r_customheight 384";
break;
}
case 5:
{
resOption = " +set r_customwidth 640 +set r_customheight 480";
break;
}
case 6:
{
resOption = " +set r_customwidth 800 +set r_customheight 600";
break;
}
case 7:
{
resOption = " +set r_customwidth 960 +set r_customheight 720";
break;
}
case 8:
{
resOption = " +set r_customwidth 1024 +set r_customheight 768";
break;
}
case 9:
{
resOption = " +set r_customwidth 1152 +set r_customheight 864";
break;
}
case 10:
{
resOption = " +set r_customwidth 1280 +set r_customheight 1024";
break;
}
case 11:
{
resOption = " +set r_customwidth 1600 +set r_customheight 1200";
break;
}
case 12:
{
resOption = " +set r_customwidth 2048 +set r_customheight 1536";
break;
}
case 13:
{
resOption = " +set r_customwidth 856 +set r_customheight 480";
break;
}
case 14:
{
resOption = " +set r_customwidth 1280 +set r_customheight 720";
break;
}
case 15:
{
resOption = " +set r_customwidth 1920 +set r_customheight 1080";
break;
}
case 16:
{
resOption = " +set r_customwidth 1280 +set r_customheight 800";
break;
}
default:
{
resOption = "";
break;
}
}
}
void ioLaunch::on_rbFull_toggled(bool checked)
{
if(checked)
{
screenOption = " +set r_fullscreen 1";
}
}
void ioLaunch::on_rbWin_toggled(bool checked)
{
if(checked)
{
screenOption = " +set r_fullscreen 0";
}
}
void ioLaunch::on_rbDefault_toggled(bool checked)
{
if(checked)
{
screenOption = "";
}
}
void ioLaunch::on_sbWidth_valueChanged(int arg1)
{
ioWidth = 0;
if(arg1 >= 0)
{
ioWidth = arg1;
ioWedited = true;
}
else{
ioWedited = false;
}
}
void ioLaunch::on_sbHeight_valueChanged(int arg1)
{
ioHeight = 0;
if(arg1 >= 0)
{
ioHeight = arg1;
ioHedited = true;
}
else{
ioHedited = false;
}
}