Screenshot upload dialog(s) now have the console window as parent.
This commit is contained in:
parent
7f2a16917e
commit
911ac19a56
@ -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);
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -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();
|
||||||
|
@ -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'
|
||||||
|
@ -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()
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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)));
|
||||||
|
@ -52,8 +52,13 @@ 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;
|
||||||
|
@ -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()
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user