Screenshot upload dialog(s) now have the console window as parent.

This commit is contained in:
Petr Mrázek 2014-05-18 19:07:01 +02:00
parent 7f2a16917e
commit 911ac19a56
11 changed files with 64 additions and 74 deletions

View File

@ -24,9 +24,11 @@
#include <gui/Platform.h> #include <gui/Platform.h>
#include <gui/dialogs/CustomMessageBox.h> #include <gui/dialogs/CustomMessageBox.h>
#include <gui/dialogs/ProgressDialog.h> #include <gui/dialogs/ProgressDialog.h>
#include "dialogs/ScreenshotDialog.h"
#include "logic/net/PasteUpload.h" #include "logic/net/PasteUpload.h"
#include "logic/icons/IconList.h" #include "logic/icons/IconList.h"
#include <logic/screenshots/ScreenshotList.h>
ConsoleWindow::ConsoleWindow(MinecraftProcess *mcproc, QWidget *parent) ConsoleWindow::ConsoleWindow(MinecraftProcess *mcproc, QWidget *parent)
: QMainWindow(parent), ui(new Ui::ConsoleWindow), proc(mcproc) : QMainWindow(parent), ui(new Ui::ConsoleWindow), proc(mcproc)
@ -35,14 +37,12 @@ ConsoleWindow::ConsoleWindow(MinecraftProcess *mcproc, QWidget *parent)
ui->setupUi(this); ui->setupUi(this);
connect(mcproc, SIGNAL(log(QString, MessageLevel::Enum)), this, connect(mcproc, SIGNAL(log(QString, MessageLevel::Enum)), this,
SLOT(write(QString, MessageLevel::Enum))); SLOT(write(QString, MessageLevel::Enum)));
connect(mcproc, SIGNAL(ended(BaseInstance *, int, QProcess::ExitStatus)), this, connect(mcproc, SIGNAL(ended(InstancePtr, int, QProcess::ExitStatus)), this,
SLOT(onEnded(BaseInstance *, int, QProcess::ExitStatus))); SLOT(onEnded(InstancePtr, int, QProcess::ExitStatus)));
connect(mcproc, SIGNAL(prelaunch_failed(BaseInstance *, int, QProcess::ExitStatus)), this, connect(mcproc, SIGNAL(prelaunch_failed(InstancePtr, int, QProcess::ExitStatus)), this,
SLOT(onEnded(BaseInstance *, int, QProcess::ExitStatus))); SLOT(onEnded(InstancePtr, int, QProcess::ExitStatus)));
connect(mcproc, SIGNAL(launch_failed(BaseInstance *)), this, connect(mcproc, SIGNAL(launch_failed(InstancePtr)), this,
SLOT(onLaunchFailed(BaseInstance *))); SLOT(onLaunchFailed(InstancePtr)));
connect(ui->btnScreenshots, &QPushButton::clicked, this, &ConsoleWindow::uploadScreenshots);
restoreState( restoreState(
QByteArray::fromBase64(MMC->settings()->get("ConsoleWindowState").toByteArray())); QByteArray::fromBase64(MMC->settings()->get("ConsoleWindowState").toByteArray()));
@ -172,6 +172,26 @@ void ConsoleWindow::on_closeButton_clicked()
close(); close();
} }
void ConsoleWindow::on_btnScreenshots_clicked()
{
ScreenshotList *list = new ScreenshotList(proc->instance());
Task *task = list->load();
ProgressDialog prog(this);
prog.exec(task);
if (!task->successful())
{
CustomMessageBox::selectable(this, tr("Failed to load screenshots!"),
task->failReason(), QMessageBox::Warning)->exec();
return;
}
ScreenshotDialog dialog(list, this);
if (dialog.exec() == ScreenshotDialog::Accepted)
{
CustomMessageBox::selectable(this, tr("Done uploading!"), dialog.message(),
QMessageBox::Information)->exec();
}
}
void ConsoleWindow::setMayClose(bool mayclose) void ConsoleWindow::setMayClose(bool mayclose)
{ {
if(mayclose) if(mayclose)
@ -242,7 +262,7 @@ void ConsoleWindow::on_btnKillMinecraft_clicked()
ui->btnKillMinecraft->setEnabled(true); ui->btnKillMinecraft->setEnabled(true);
} }
void ConsoleWindow::onEnded(BaseInstance *instance, int code, QProcess::ExitStatus status) void ConsoleWindow::onEnded(InstancePtr instance, int code, QProcess::ExitStatus status)
{ {
bool peacefulExit = code == 0 && status != QProcess::CrashExit; bool peacefulExit = code == 0 && status != QProcess::CrashExit;
ui->btnKillMinecraft->setEnabled(false); ui->btnKillMinecraft->setEnabled(false);
@ -274,7 +294,7 @@ void ConsoleWindow::onEnded(BaseInstance *instance, int code, QProcess::ExitStat
} }
} }
void ConsoleWindow::onLaunchFailed(BaseInstance *instance) void ConsoleWindow::onLaunchFailed(InstancePtr instance)
{ {
ui->btnKillMinecraft->setEnabled(false); ui->btnKillMinecraft->setEnabled(false);

View File

@ -51,7 +51,6 @@ private:
signals: signals:
void isClosing(); void isClosing();
void uploadScreenshots();
public public
slots: slots:
@ -71,9 +70,11 @@ slots:
private private
slots: slots:
void on_closeButton_clicked(); void on_closeButton_clicked();
void on_btnScreenshots_clicked();
void on_btnKillMinecraft_clicked(); void on_btnKillMinecraft_clicked();
void onEnded(BaseInstance *instance, int code, QProcess::ExitStatus status);
void onLaunchFailed(BaseInstance *instance); void onEnded(InstancePtr instance, int code, QProcess::ExitStatus status);
void onLaunchFailed(InstancePtr instance);
// FIXME: add handlers for the other MinecraftProcess signals (pre/post launch command // FIXME: add handlers for the other MinecraftProcess signals (pre/post launch command
// failures) // failures)

View File

@ -64,7 +64,6 @@
#include "gui/dialogs/AccountSelectDialog.h" #include "gui/dialogs/AccountSelectDialog.h"
#include "gui/dialogs/UpdateDialog.h" #include "gui/dialogs/UpdateDialog.h"
#include "gui/dialogs/EditAccountDialog.h" #include "gui/dialogs/EditAccountDialog.h"
#include "gui/dialogs/ScreenshotDialog.h"
#include "gui/dialogs/NotificationDialog.h" #include "gui/dialogs/NotificationDialog.h"
#include "gui/ConsoleWindow.h" #include "gui/ConsoleWindow.h"
@ -1239,15 +1238,19 @@ void MainWindow::launchInstance(InstancePtr instance, AuthSessionPtr session, Ba
Q_ASSERT_X(instance != NULL, "launchInstance", "instance is NULL"); Q_ASSERT_X(instance != NULL, "launchInstance", "instance is NULL");
Q_ASSERT_X(session.get() != nullptr, "launchInstance", "session is NULL"); Q_ASSERT_X(session.get() != nullptr, "launchInstance", "session is NULL");
proc = instance->prepareForLaunch(session); QString launchScript;
if (!proc)
if(!instance->prepareForLaunch(session, launchScript))
return; return;
MinecraftProcess *proc = new MinecraftProcess(instance);
proc->setLaunchScript(launchScript);
proc->setWorkdir(instance->minecraftRoot());
this->hide(); this->hide();
console = new ConsoleWindow(proc); console = new ConsoleWindow(proc);
connect(console, SIGNAL(isClosing()), this, SLOT(instanceEnded())); connect(console, SIGNAL(isClosing()), this, SLOT(instanceEnded()));
connect(console, &ConsoleWindow::uploadScreenshots, this, &MainWindow::on_actionScreenshots_triggered);
proc->setLogin(session); proc->setLogin(session);
proc->arm(); proc->arm();
@ -1269,7 +1272,7 @@ void MainWindow::launchInstance(InstancePtr instance, AuthSessionPtr session, Ba
dialog.setLabelText(tr("Waiting for profiler...")); dialog.setLabelText(tr("Waiting for profiler..."));
connect(&dialog, &QProgressDialog::canceled, profilerInstance, &BaseProfiler::abortProfiling); connect(&dialog, &QProgressDialog::canceled, profilerInstance, &BaseProfiler::abortProfiling);
dialog.show(); dialog.show();
connect(profilerInstance, &BaseProfiler::readyToLaunch, [&dialog, this](const QString &message) connect(profilerInstance, &BaseProfiler::readyToLaunch, [&dialog, this, proc](const QString &message)
{ {
dialog.accept(); dialog.accept();
QMessageBox msg; QMessageBox msg;
@ -1282,7 +1285,7 @@ void MainWindow::launchInstance(InstancePtr instance, AuthSessionPtr session, Ba
msg.exec(); msg.exec();
proc->launch(); proc->launch();
}); });
connect(profilerInstance, &BaseProfiler::abortLaunch, [&dialog, this](const QString &message) connect(profilerInstance, &BaseProfiler::abortLaunch, [&dialog, this, proc](const QString &message)
{ {
dialog.accept(); dialog.accept();
QMessageBox msg; QMessageBox msg;
@ -1569,25 +1572,3 @@ void MainWindow::checkSetDefaultJava()
MMC->settings()->set("JavaPath", QString("java")); MMC->settings()->set("JavaPath", QString("java"));
} }
} }
void MainWindow::on_actionScreenshots_triggered()
{
if (!m_selectedInstance)
return;
ScreenshotList *list = new ScreenshotList(m_selectedInstance);
Task *task = list->load();
ProgressDialog prog(this);
prog.exec(task);
if (!task->successful())
{
CustomMessageBox::selectable(this, tr("Failed to load screenshots!"),
task->failReason(), QMessageBox::Warning)->exec();
return;
}
ScreenshotDialog dialog(list, this);
if (dialog.exec() == ScreenshotDialog::Accepted)
{
CustomMessageBox::selectable(this, tr("Done uploading!"), dialog.message(),
QMessageBox::Information)->exec();
}
}

View File

@ -144,8 +144,6 @@ slots:
void showInstanceContextMenu(const QPoint &); void showInstanceContextMenu(const QPoint &);
void on_actionScreenshots_triggered();
void updateToolsMenu(); void updateToolsMenu();
void skinJobFinished(); void skinJobFinished();

View File

@ -163,7 +163,7 @@ public:
virtual std::shared_ptr<Task> doUpdate() = 0; virtual std::shared_ptr<Task> doUpdate() = 0;
/// returns a valid minecraft process, ready for launch with the given account. /// returns a valid minecraft process, ready for launch with the given account.
virtual MinecraftProcess *prepareForLaunch(AuthSessionPtr account) = 0; virtual bool prepareForLaunch(AuthSessionPtr account, QString & launchScript) = 0;
/// do any necessary cleanups after the instance finishes. also runs before /// do any necessary cleanups after the instance finishes. also runs before
/// 'prepareForLaunch' /// 'prepareForLaunch'

View File

@ -50,16 +50,13 @@ std::shared_ptr<Task> LegacyInstance::doUpdate()
return std::shared_ptr<Task>(new LegacyUpdate(this, this)); return std::shared_ptr<Task>(new LegacyUpdate(this, this));
} }
MinecraftProcess *LegacyInstance::prepareForLaunch(AuthSessionPtr account) bool LegacyInstance::prepareForLaunch(AuthSessionPtr account, QString & launchScript)
{ {
MinecraftProcess *proc = new MinecraftProcess(this);
QIcon icon = MMC->icons()->getIcon(iconKey()); QIcon icon = MMC->icons()->getIcon(iconKey());
auto pixmap = icon.pixmap(128, 128); auto pixmap = icon.pixmap(128, 128);
pixmap.save(PathCombine(minecraftRoot(), "icon.png"), "PNG"); pixmap.save(PathCombine(minecraftRoot(), "icon.png"), "PNG");
// create the launch script // create the launch script
QString launchScript;
{ {
// window size // window size
QString windowParams; QString windowParams;
@ -79,12 +76,7 @@ MinecraftProcess *LegacyInstance::prepareForLaunch(AuthSessionPtr account)
launchScript += "lwjgl " + lwjgl + "\n"; launchScript += "lwjgl " + lwjgl + "\n";
launchScript += "launcher legacy\n"; launchScript += "launcher legacy\n";
} }
proc->setLaunchScript(launchScript); return true;
// set the process work path
proc->setWorkdir(minecraftRoot());
return proc;
} }
void LegacyInstance::cleanupAfterRun() void LegacyInstance::cleanupAfterRun()

View File

@ -79,7 +79,7 @@ public:
virtual void setShouldUpdate(bool val) override; virtual void setShouldUpdate(bool val) override;
virtual std::shared_ptr<Task> doUpdate() override; virtual std::shared_ptr<Task> doUpdate() override;
virtual MinecraftProcess *prepareForLaunch(AuthSessionPtr account) override; virtual bool prepareForLaunch(AuthSessionPtr account, QString & launchScript) override;
virtual void cleanupAfterRun() override; virtual void cleanupAfterRun() override;
virtual QDialog *createModEditDialog(QWidget *parent) override; virtual QDialog *createModEditDialog(QWidget *parent) override;

View File

@ -34,7 +34,7 @@
#define IBUS "@im=ibus" #define IBUS "@im=ibus"
// constructor // constructor
MinecraftProcess::MinecraftProcess(BaseInstance *inst) : m_instance(inst) MinecraftProcess::MinecraftProcess(InstancePtr inst) : m_instance(inst)
{ {
connect(this, SIGNAL(finished(int, QProcess::ExitStatus)), connect(this, SIGNAL(finished(int, QProcess::ExitStatus)),
SLOT(finish(int, QProcess::ExitStatus))); SLOT(finish(int, QProcess::ExitStatus)));

View File

@ -52,7 +52,12 @@ public:
* @brief MinecraftProcess constructor * @brief MinecraftProcess constructor
* @param inst the Instance pointer to launch * @param inst the Instance pointer to launch
*/ */
MinecraftProcess(BaseInstance *inst); MinecraftProcess(InstancePtr inst);
virtual ~MinecraftProcess()
{
};
/** /**
* @brief start the launcher part with the provided launch script * @brief start the launcher part with the provided launch script
@ -69,7 +74,7 @@ public:
*/ */
void abort(); void abort();
BaseInstance *instance() InstancePtr instance()
{ {
return m_instance; return m_instance;
} }
@ -97,22 +102,22 @@ signals:
/** /**
* @brief emitted when Minecraft immediately fails to run * @brief emitted when Minecraft immediately fails to run
*/ */
void launch_failed(BaseInstance *); void launch_failed(InstancePtr);
/** /**
* @brief emitted when the PreLaunchCommand fails * @brief emitted when the PreLaunchCommand fails
*/ */
void prelaunch_failed(BaseInstance *, int code, QProcess::ExitStatus status); void prelaunch_failed(InstancePtr, int code, QProcess::ExitStatus status);
/** /**
* @brief emitted when the PostLaunchCommand fails * @brief emitted when the PostLaunchCommand fails
*/ */
void postlaunch_failed(BaseInstance *, int code, QProcess::ExitStatus status); void postlaunch_failed(InstancePtr, int code, QProcess::ExitStatus status);
/** /**
* @brief emitted when mc has finished and the PostLaunchCommand was run * @brief emitted when mc has finished and the PostLaunchCommand was run
*/ */
void ended(BaseInstance *, int code, QProcess::ExitStatus status); void ended(InstancePtr, int code, QProcess::ExitStatus status);
/** /**
* @brief emitted when we want to log something * @brief emitted when we want to log something
@ -122,7 +127,7 @@ signals:
void log(QString text, MessageLevel::Enum level = MessageLevel::MultiMC); void log(QString text, MessageLevel::Enum level = MessageLevel::MultiMC);
protected: protected:
BaseInstance *m_instance = nullptr; InstancePtr m_instance;
QString m_err_leftover; QString m_err_leftover;
QString m_out_leftover; QString m_out_leftover;
QProcess m_prepostlaunchprocess; QProcess m_prepostlaunchprocess;

View File

@ -189,7 +189,7 @@ QStringList OneSixInstance::processMinecraftArgs(AuthSessionPtr session)
return parts; return parts;
} }
MinecraftProcess *OneSixInstance::prepareForLaunch(AuthSessionPtr session) bool OneSixInstance::prepareForLaunch(AuthSessionPtr account, QString &launchScript)
{ {
I_D(OneSixInstance); I_D(OneSixInstance);
@ -200,7 +200,6 @@ MinecraftProcess *OneSixInstance::prepareForLaunch(AuthSessionPtr session)
auto version = d->version; auto version = d->version;
if (!version) if (!version)
return nullptr; return nullptr;
QString launchScript;
{ {
auto libs = version->getActiveNormalLibs(); auto libs = version->getActiveNormalLibs();
for (auto lib : libs) for (auto lib : libs)
@ -212,7 +211,7 @@ MinecraftProcess *OneSixInstance::prepareForLaunch(AuthSessionPtr session)
} }
launchScript += "mainClass " + version->mainClass + "\n"; launchScript += "mainClass " + version->mainClass + "\n";
for (auto param : processMinecraftArgs(session)) for (auto param : processMinecraftArgs(account))
{ {
launchScript += "param " + param + "\n"; launchScript += "param " + param + "\n";
} }
@ -240,13 +239,7 @@ MinecraftProcess *OneSixInstance::prepareForLaunch(AuthSessionPtr session)
} }
launchScript += "natives " + natives_dir.absolutePath() + "\n"; launchScript += "natives " + natives_dir.absolutePath() + "\n";
launchScript += "launcher onesix\n"; launchScript += "launcher onesix\n";
return true;
// create the process and set its parameters
MinecraftProcess *proc = new MinecraftProcess(this);
proc->setWorkdir(minecraftRoot());
proc->setLaunchScript(launchScript);
// proc->setNativeFolder(natives_dir.absolutePath());
return proc;
} }
void OneSixInstance::cleanupAfterRun() void OneSixInstance::cleanupAfterRun()

View File

@ -40,7 +40,7 @@ public:
virtual QString instanceConfigFolder() const override; virtual QString instanceConfigFolder() const override;
virtual std::shared_ptr<Task> doUpdate() override; virtual std::shared_ptr<Task> doUpdate() override;
virtual MinecraftProcess *prepareForLaunch(AuthSessionPtr session) override; virtual bool prepareForLaunch(AuthSessionPtr account, QString & launchScript) override;
virtual void cleanupAfterRun() override; virtual void cleanupAfterRun() override;