| 
									
										
										
										
											2016-07-13 05:52:45 +00:00
										 |  |  | // Copyright 2016 Dolphin Emulator Project
 | 
					
						
							|  |  |  | // Licensed under GPLv2+
 | 
					
						
							|  |  |  | // Refer to the license.txt file included.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <QApplication>
 | 
					
						
							|  |  |  | #include <QBoxLayout>
 | 
					
						
							|  |  |  | #include <QCommandLinkButton>
 | 
					
						
							|  |  |  | #include <QDialogButtonBox>
 | 
					
						
							|  |  |  | #include <QFileInfo>
 | 
					
						
							|  |  |  | #include <QLabel>
 | 
					
						
							|  |  |  | #include <QMessageBox>
 | 
					
						
							|  |  |  | #include <QProcess>
 | 
					
						
							|  |  |  | #include <QStyle>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #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); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   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-16 00:51:02 +00:00
										 |  |  |   heading->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); | 
					
						
							| 
									
										
										
										
											2016-07-13 05:52:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   icon->setPixmap(style()->standardPixmap(QStyle::SP_MessageBoxWarning, nullptr, this)); | 
					
						
							|  |  |  |   icon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   QString body_text = tr( | 
					
						
							|  |  |  |       "<p>DolphinQt is a new experimental GUI that is eventually intended to replace " | 
					
						
							|  |  |  |       "the current GUI based on wxWidgets. The implementation is <b>very " | 
					
						
							|  |  |  |       "incomplete</b>, even basic functionality like changing settings and " | 
					
						
							|  |  |  |       "attaching gamepads may be missing or not work at all.</p>\n" | 
					
						
							|  |  |  |       "<p>Only developers working on the DolphinQt implementation should use it at " | 
					
						
							|  |  |  |       "the present time; normal users are recommended to continue using the " | 
					
						
							|  |  |  |       "older DolphinWX GUI for the time being.</p>\n" | 
					
						
							|  |  |  |       "<p><big><b>Bug Reports:</b></big> At the current time there is no point making bug reports " | 
					
						
							|  |  |  |       "about the DolphinQt GUI as the list of what is broken is much longer " | 
					
						
							|  |  |  |       "than the list of things that work.</p>\n"); | 
					
						
							|  |  |  |   body->setText(body_text); | 
					
						
							|  |  |  |   body->setWordWrap(true); | 
					
						
							|  |  |  |   body->setForegroundRole(QPalette::Text); | 
					
						
							|  |  |  |   body->setAlignment(Qt::AlignTop | Qt::AlignLeft); | 
					
						
							| 
									
										
										
										
											2016-07-16 00:51:02 +00:00
										 |  |  |   body->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); | 
					
						
							|  |  |  |   body->setMinimumWidth(QFontMetrics(body->font()).averageCharWidth() * 76); | 
					
						
							| 
									
										
										
										
											2016-07-13 05:52:45 +00: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(); }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   QVBoxLayout* body_column = new QVBoxLayout(); | 
					
						
							|  |  |  |   body_column->addWidget(heading); | 
					
						
							|  |  |  |   body_column->addWidget(body); | 
					
						
							|  |  |  |   body_column->addWidget(btn_dolphinwx); | 
					
						
							|  |  |  |   body_column->addWidget(btn_run); | 
					
						
							|  |  |  |   body_column->setMargin(0); | 
					
						
							| 
									
										
										
										
											2016-07-16 00:51:02 +00:00
										 |  |  |   body_column->setSpacing(10); | 
					
						
							| 
									
										
										
										
											2016-07-13 05:52:45 +00: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-16 00:51:02 +00:00
										 |  |  |   top_layout->setSizeConstraint(QLayout::SetMinimumSize); | 
					
						
							| 
									
										
										
										
											2016-07-13 05:52:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   setWindowIcon(Resources::GetMisc(Resources::LOGO_SMALL)); | 
					
						
							|  |  |  |   setWindowTitle(tr("DolphinQt2 Experimental GUI")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | InDevelopmentWarning::~InDevelopmentWarning() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } |