2016-07-12 23:52:45 -06:00
|
|
|
// Copyright 2016 Dolphin Emulator Project
|
|
|
|
// Licensed under GPLv2+
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#include <QApplication>
|
|
|
|
#include <QBoxLayout>
|
2017-09-02 12:40:18 -06:00
|
|
|
#include <QCheckBox>
|
2016-07-12 23:52:45 -06:00
|
|
|
#include <QCommandLinkButton>
|
|
|
|
#include <QDialogButtonBox>
|
|
|
|
#include <QFileInfo>
|
|
|
|
#include <QLabel>
|
|
|
|
#include <QMessageBox>
|
|
|
|
#include <QProcess>
|
|
|
|
#include <QStyle>
|
|
|
|
|
2017-09-02 12:40:18 -06:00
|
|
|
#include "Core/ConfigManager.h"
|
2016-07-12 23:52:45 -06:00
|
|
|
#include "DolphinQt2/InDevelopmentWarning.h"
|
|
|
|
#include "DolphinQt2/Resources.h"
|
|
|
|
|
|
|
|
static bool LaunchDolphinWX()
|
|
|
|
{
|
|
|
|
QFileInfo file_info;
|
|
|
|
for (auto path : {"/Dolphin.exe", "/dolphin-emu", "/Dolphin"})
|
|
|
|
{
|
|
|
|
file_info.setFile(qApp->applicationDirPath() + QString::fromUtf8(path));
|
|
|
|
if (file_info.isExecutable())
|
|
|
|
return QProcess::startDetached(file_info.absoluteFilePath(), {});
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
InDevelopmentWarning::InDevelopmentWarning(QWidget* parent)
|
|
|
|
: QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint)
|
|
|
|
{
|
|
|
|
QWidget* container = new QWidget(this);
|
|
|
|
QDialogButtonBox* std_buttons =
|
|
|
|
new QDialogButtonBox(QDialogButtonBox::Cancel, Qt::Horizontal, this);
|
|
|
|
QLabel* heading = new QLabel(container);
|
|
|
|
QLabel* icon = new QLabel(container);
|
|
|
|
QLabel* body = new QLabel(container);
|
|
|
|
|
|
|
|
QCommandLinkButton* btn_dolphinwx = new QCommandLinkButton(
|
|
|
|
tr("Run DolphinWX Instead"), tr("Recommended for normal users"), container);
|
|
|
|
QCommandLinkButton* btn_run = new QCommandLinkButton(tr("Use DolphinQt Anyway"), container);
|
2017-09-02 12:40:18 -06:00
|
|
|
QCheckBox* hide_future = new QCheckBox(tr("Don't show me this warning again"));
|
2016-07-12 23:52:45 -06:00
|
|
|
|
|
|
|
container->setForegroundRole(QPalette::Text);
|
|
|
|
container->setBackgroundRole(QPalette::Base);
|
|
|
|
container->setAutoFillBackground(true);
|
|
|
|
|
|
|
|
std_buttons->setContentsMargins(10, 0, 10, 0);
|
|
|
|
|
|
|
|
QFont heading_font{heading->font()};
|
|
|
|
heading_font.setPointSizeF(heading_font.pointSizeF() * 1.5);
|
|
|
|
heading->setFont(heading_font);
|
|
|
|
heading->setText(tr("DolphinQt Experimental GUI"));
|
|
|
|
heading->setForegroundRole(QPalette::Text);
|
|
|
|
heading->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
2016-07-15 18:51:02 -06:00
|
|
|
heading->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
|
2016-07-12 23:52:45 -06:00
|
|
|
|
|
|
|
icon->setPixmap(style()->standardPixmap(QStyle::SP_MessageBoxWarning, nullptr, this));
|
|
|
|
icon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
|
|
|
|
|
|
|
QString body_text = tr(
|
2017-07-07 00:36:18 -06:00
|
|
|
"<p>DolphinQt is a new experimental GUI that is intended to replace "
|
|
|
|
"the current GUI based on wxWidgets. The implementation is <b>currently "
|
|
|
|
"incomplete</b> so some functionality (like changing certain settings) may be missing.</p>\n"
|
|
|
|
"<p>Only developers working on the DolphinQt implementation and curious testers should use "
|
|
|
|
"it at "
|
2016-07-12 23:52:45 -06:00
|
|
|
"the present time; normal users are recommended to continue using the "
|
|
|
|
"older DolphinWX GUI for the time being.</p>\n"
|
2017-07-07 00:36:18 -06:00
|
|
|
"<h3>Bug Reports</h3><p>At the current time there is no point making bug reports "
|
|
|
|
"about DolphinQt GUI's missing features as the developers are already aware of those.</p>\n");
|
2016-07-12 23:52:45 -06:00
|
|
|
body->setText(body_text);
|
|
|
|
body->setWordWrap(true);
|
|
|
|
body->setForegroundRole(QPalette::Text);
|
|
|
|
body->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
2016-07-15 18:51:02 -06:00
|
|
|
body->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
|
|
|
|
body->setMinimumWidth(QFontMetrics(body->font()).averageCharWidth() * 76);
|
2016-07-12 23:52:45 -06:00
|
|
|
|
|
|
|
btn_dolphinwx->setDefault(true);
|
|
|
|
|
|
|
|
connect(btn_dolphinwx, &QCommandLinkButton::clicked, this, [this](bool) {
|
|
|
|
if (!LaunchDolphinWX())
|
|
|
|
QMessageBox::critical(
|
|
|
|
this, tr("Failed to launch"),
|
|
|
|
tr("Could not start DolphinWX. Check for dolphin.exe in the installation directory."));
|
|
|
|
reject();
|
|
|
|
});
|
|
|
|
connect(btn_run, &QCommandLinkButton::clicked, this, [this](bool) { accept(); });
|
|
|
|
connect(std_buttons->button(QDialogButtonBox::Cancel), &QPushButton::clicked, this,
|
|
|
|
[this](bool) { reject(); });
|
2017-09-02 12:40:18 -06:00
|
|
|
connect(hide_future, &QCheckBox::toggled,
|
|
|
|
[](bool hide) { SConfig::GetInstance().m_show_development_warning = !hide; });
|
2016-07-12 23:52:45 -06:00
|
|
|
|
|
|
|
QVBoxLayout* body_column = new QVBoxLayout();
|
|
|
|
body_column->addWidget(heading);
|
|
|
|
body_column->addWidget(body);
|
|
|
|
body_column->addWidget(btn_dolphinwx);
|
|
|
|
body_column->addWidget(btn_run);
|
2017-09-02 12:40:18 -06:00
|
|
|
body_column->addWidget(hide_future);
|
2016-07-12 23:52:45 -06:00
|
|
|
body_column->setMargin(0);
|
2016-07-15 18:51:02 -06:00
|
|
|
body_column->setSpacing(10);
|
2016-07-12 23:52:45 -06:00
|
|
|
|
|
|
|
QHBoxLayout* icon_layout = new QHBoxLayout(container);
|
|
|
|
icon_layout->addWidget(icon, 0, Qt::AlignTop);
|
|
|
|
icon_layout->addLayout(body_column);
|
|
|
|
icon_layout->setContentsMargins(15, 10, 10, 10);
|
|
|
|
icon_layout->setSpacing(15);
|
|
|
|
|
|
|
|
QVBoxLayout* top_layout = new QVBoxLayout(this);
|
|
|
|
top_layout->addWidget(container);
|
|
|
|
top_layout->addWidget(std_buttons);
|
|
|
|
top_layout->setSpacing(10);
|
|
|
|
top_layout->setContentsMargins(0, 0, 0, 10);
|
2016-07-15 18:51:02 -06:00
|
|
|
top_layout->setSizeConstraint(QLayout::SetMinimumSize);
|
2016-07-12 23:52:45 -06:00
|
|
|
|
|
|
|
setWindowIcon(Resources::GetMisc(Resources::LOGO_SMALL));
|
|
|
|
setWindowTitle(tr("DolphinQt2 Experimental GUI"));
|
|
|
|
}
|
|
|
|
|
|
|
|
InDevelopmentWarning::~InDevelopmentWarning()
|
|
|
|
{
|
|
|
|
}
|