summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gui/mainwindow.cpp56
-rw-r--r--gui/mainwindow.h7
-rw-r--r--gui/taskdialog.cpp12
-rw-r--r--libmultimc/include/task.h17
-rw-r--r--libmultimc/src/task.cpp30
5 files changed, 98 insertions, 24 deletions
diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp
index 750610c5..96609531 100644
--- a/gui/mainwindow.cpp
+++ b/gui/mainwindow.cpp
@@ -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()
diff --git a/gui/mainwindow.h b/gui/mainwindow.h
index 896fe9f1..bc35038e 100644
--- a/gui/mainwindow.h
+++ b/gui/mainwindow.h
@@ -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
diff --git a/gui/taskdialog.cpp b/gui/taskdialog.cpp
index 9b1ddf23..a74b7718 100644
--- a/gui/taskdialog.cpp
+++ b/gui/taskdialog.cpp
@@ -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();
diff --git a/libmultimc/include/task.h b/libmultimc/include/task.h
index fc5b1d25..c8c12c02 100644
--- a/libmultimc/include/task.h
+++ b/libmultimc/include/task.h
@@ -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;
};
diff --git a/libmultimc/src/task.cpp b/libmultimc/src/task.cpp
index 3e30827b..780c3b38 100644
--- a/libmultimc/src/task.cpp
+++ b/libmultimc/src/task.cpp
@@ -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);
}