Made the version list load in the background on startup.

Resolves JIRA issue MMC-11:
	https://jira.forkk.net/browse/MMC-11
This commit is contained in:
Andrew 2013-05-06 17:19:20 -05:00
parent 2fe6bc47ed
commit 7e3592bee8
5 changed files with 98 additions and 24 deletions

View File

@ -56,6 +56,8 @@
#include "instancemodel.h"
#include "instancedelegate.h"
#include "minecraftversionlist.h"
// Opens the given file in the default application.
// TODO: Move this somewhere.
void openInDefaultProgram ( QString filename );
@ -75,16 +77,16 @@ MainWindow::MainWindow ( QWidget *parent ) :
view->setPalette(pal);
*/
view->setStyleSheet(
"QListView\
{\
background-image: url(:/backgrounds/kitteh);\
background-attachment: fixed;\
background-clip: padding;\
background-position: top right;\
background-repeat: none;\
background-color:palette(base);\
}");
// view->setStyleSheet(
// "QListView\
// {\
// background-image: url(:/backgrounds/kitteh);\
// background-attachment: fixed;\
// background-clip: padding;\
// background-position: top right;\
// background-repeat: none;\
// background-color:palette(base);\
// }");
view->setSelectionMode ( QAbstractItemView::SingleSelection );
//view->setSpacing( KDialog::spacingHint() );
@ -126,6 +128,12 @@ MainWindow::MainWindow ( QWidget *parent ) :
instList.at(0)->setGroup("TEST GROUP");
instList.at(0)->setName("TEST ITEM");
*/
if (!MinecraftVersionList::getMainList().isLoaded())
{
m_versionLoadTask = MinecraftVersionList::getMainList().getLoadTask();
startTask(m_versionLoadTask);
}
}
MainWindow::~MainWindow()
@ -146,6 +154,14 @@ void MainWindow::instanceActivated ( QModelIndex index )
void MainWindow::on_actionAddInstance_triggered()
{
if (!MinecraftVersionList::getMainList().isLoaded() &&
m_versionLoadTask && m_versionLoadTask->isRunning())
{
QEventLoop waitLoop;
waitLoop.connect(m_versionLoadTask, SIGNAL(ended()), SLOT(quit()));
waitLoop.exec();
}
NewInstanceDialog *newInstDlg = new NewInstanceDialog ( this );
if (newInstDlg->exec())
{
@ -347,6 +363,26 @@ void MainWindow::onLoginFailed ( QString inst, const QString& errorMsg )
doLogin(inst, errorMsg);
}
void MainWindow::taskStart(Task *task)
{
// Nothing to do here yet.
}
void MainWindow::taskEnd(Task *task)
{
if (task == m_versionLoadTask)
m_versionLoadTask = NULL;
delete task;
}
void MainWindow::startTask(Task *task)
{
connect(task, SIGNAL(started(Task*)), SLOT(taskStart(Task*)));
connect(task, SIGNAL(ended(Task*)), SLOT(taskEnd(Task*)));
task->startTask();
}
// Create A Desktop Shortcut
void MainWindow::on_actionMakeDesktopShortcut_triggered()

View File

@ -87,9 +87,14 @@ private slots:
void onLoginComplete( QString inst, LoginResponse response );
void onLoginFailed( QString inst, const QString& errorMsg );
void taskStart(Task *task);
void taskEnd(Task *task);
public slots:
void instanceActivated ( QModelIndex );
void startTask(Task *task);
private:
Ui::MainWindow *ui;
@ -100,6 +105,8 @@ private:
InstanceList instList;
MinecraftProcess *proc;
ConsoleWindow *console;
Task *m_versionLoadTask;
};
#endif // MAINWINDOW_H

View File

@ -45,14 +45,10 @@ void TaskDialog::exec(Task *task)
this->task = task;
// Connect signals.
connect(task, SIGNAL(taskStarted(Task*)),
this, SLOT(onTaskStarted(Task*)));
connect(task, SIGNAL(taskEnded(Task*)),
this, SLOT(onTaskEnded(Task*)));
connect(task, SIGNAL(statusChanged(const QString&)),
this, SLOT(changeStatus(const QString&)));
connect(task, SIGNAL(progressChanged(int)),
this, SLOT(changeProgress(int)));
connect(task, SIGNAL(started(Task*)), SLOT(onTaskStarted(Task*)));
connect(task, SIGNAL(ended(Task*)), SLOT(onTaskEnded(Task*)));
connect(task, SIGNAL(statusChanged(const QString&)), SLOT(changeStatus(const QString&)));
connect(task, SIGNAL(progressChanged(int)), SLOT(changeProgress(int)));
task->startTask();
QDialog::exec();

View File

@ -48,8 +48,15 @@ public slots:
void setProgress(int progress);
signals:
void taskStarted(Task* task);
void taskEnded(Task* task);
void started(Task* task);
void ended(Task* task);
void started();
void ended();
void statusChanged(Task* task, const QString& status);
void progressChanged(Task* task, int progress);
void statusChanged(const QString& status);
void progressChanged(int progress);
@ -58,6 +65,12 @@ protected:
virtual void run();
virtual void executeTask() = 0;
virtual void emitStarted();
virtual void emitEnded();
virtual void emitStatusChange(const QString &status);
virtual void emitProgressChange(int progress);
QString status;
int progress;
};

View File

@ -29,7 +29,7 @@ QString Task::getStatus() const
void Task::setStatus(const QString &status)
{
this->status = status;
emit statusChanged(status);
emitStatusChange(status);
}
int Task::getProgress() const
@ -45,7 +45,7 @@ void Task::calcProgress(int parts, int whole)
void Task::setProgress(int progress)
{
this->progress = progress;
emit progressChanged(progress);
emitProgressChange(progress);
}
void Task::startTask()
@ -55,7 +55,29 @@ void Task::startTask()
void Task::run()
{
emit taskStarted(this);
emitStarted();
executeTask();
emit taskEnded(this);
emitEnded();
}
void Task::emitStarted()
{
emit started();
emit started(this);
}
void Task::emitEnded()
{
emit ended();
emit ended(this);
}
void Task::emitStatusChange(const QString &status)
{
emit statusChanged(status);
}
void Task::emitProgressChange(int progress)
{
emit progressChanged(progress);
}