summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2013-03-18 23:00:46 +0100
committerPetr Mrázek <peterix@gmail.com>2013-03-18 23:00:46 +0100
commit65faabeed48584c461ca21d784c3f1d46f67f832 (patch)
treee814006279d0c56246e61e5c8f3bd29bc0e1c541
parentb84dfddd1b24e82dccb5a20d9c30570d26846e76 (diff)
downloadMultiMC-65faabeed48584c461ca21d784c3f1d46f67f832.tar
MultiMC-65faabeed48584c461ca21d784c3f1d46f67f832.tar.gz
MultiMC-65faabeed48584c461ca21d784c3f1d46f67f832.tar.lz
MultiMC-65faabeed48584c461ca21d784c3f1d46f67f832.tar.xz
MultiMC-65faabeed48584c461ca21d784c3f1d46f67f832.zip
Connect instance list to model.
-rw-r--r--gui/instancemodel.cpp27
-rw-r--r--gui/instancemodel.h6
-rw-r--r--gui/mainwindow.cpp6
-rw-r--r--libmultimc/include/instancelist.h41
-rw-r--r--libmultimc/src/instancelist.cpp40
-rw-r--r--libutil/CMakeLists.txt3
-rw-r--r--main.cpp19
7 files changed, 105 insertions, 37 deletions
diff --git a/gui/instancemodel.cpp b/gui/instancemodel.cpp
index 73d0dbc1..49909940 100644
--- a/gui/instancemodel.cpp
+++ b/gui/instancemodel.cpp
@@ -6,8 +6,33 @@ InstanceModel::InstanceModel ( const InstanceList& instances, QObject *parent )
: QAbstractListModel ( parent ), m_instances ( &instances )
{
cachedIcon = QIcon(":/icons/multimc/scalable/apps/multimc.svg");
+ currentInstancesNumber = m_instances->count();
+ connect(m_instances,SIGNAL(instanceAdded(int)),this,SLOT(onInstanceAdded(int)));
+ connect(m_instances,SIGNAL(instanceChanged(int)),this,SLOT(onInstanceChanged(int)));
+ connect(m_instances,SIGNAL(invalidated()),this,SLOT(onInvalidated()));
}
+void InstanceModel::onInstanceAdded ( int index )
+{
+ beginInsertRows(QModelIndex(), index, index);
+ currentInstancesNumber ++;
+ endInsertRows();
+}
+
+// TODO: this doesn't trigger yet
+void InstanceModel::onInstanceChanged ( int index )
+{
+
+}
+
+void InstanceModel::onInvalidated()
+{
+ beginResetModel();
+ currentInstancesNumber = m_instances->count();
+ endResetModel();
+}
+
+
int InstanceModel::rowCount ( const QModelIndex& parent ) const
{
Q_UNUSED ( parent );
@@ -17,7 +42,7 @@ int InstanceModel::rowCount ( const QModelIndex& parent ) const
QModelIndex InstanceModel::index ( int row, int column, const QModelIndex& parent ) const
{
Q_UNUSED ( parent );
- if ( row < 0 || row >= m_instances->count() )
+ if ( row < 0 || row >= currentInstancesNumber )
return QModelIndex();
return createIndex ( row, column, ( void* ) m_instances->at ( row ).data() );
}
diff --git a/gui/instancemodel.h b/gui/instancemodel.h
index 995c51ec..de43b7b8 100644
--- a/gui/instancemodel.h
+++ b/gui/instancemodel.h
@@ -22,9 +22,15 @@ public:
QVariant data ( const QModelIndex& index, int role ) const;
Qt::ItemFlags flags ( const QModelIndex& index ) const;
+public slots:
+ void onInstanceAdded(int index);
+ void onInstanceChanged(int index);
+ void onInvalidated();
+
private:
const InstanceList* m_instances;
QIcon cachedIcon;
+ int currentInstancesNumber;
};
class InstanceProxyModel : public KCategorizedSortFilterProxyModel
diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp
index 676ec45e..b799bdcf 100644
--- a/gui/mainwindow.cpp
+++ b/gui/mainwindow.cpp
@@ -64,8 +64,6 @@ MainWindow::MainWindow ( QWidget *parent ) :
{
ui->setupUi ( this );
// Create the widget
- instList.loadList();
-
view = new KCategorizedView ( ui->centralWidget );
drawer = new KCategoryDrawer ( view );
@@ -100,7 +98,9 @@ MainWindow::MainWindow ( QWidget *parent ) :
view->setModel ( proxymodel );
connect(view, SIGNAL(doubleClicked(const QModelIndex &)),
this, SLOT(instanceActivated(const QModelIndex &)));
-
+
+ // Load the instances.
+ instList.loadList();
}
MainWindow::~MainWindow()
diff --git a/libmultimc/include/instancelist.h b/libmultimc/include/instancelist.h
index d4e7556a..3eef8bdc 100644
--- a/libmultimc/include/instancelist.h
+++ b/libmultimc/include/instancelist.h
@@ -17,16 +17,14 @@
#define INSTANCELIST_H
#include <QObject>
-
#include <QSharedPointer>
-#include "siglist.h"
-
+#include "instance.h"
#include "libmmc_config.h"
class Instance;
-class LIBMULTIMC_EXPORT InstanceList : public QObject, public SigList< QSharedPointer<Instance> >
+class LIBMULTIMC_EXPORT InstanceList : public QObject
{
Q_OBJECT
public:
@@ -46,14 +44,43 @@ public:
QString instDir() const { return m_instDir; }
/*!
- * \brief Loads the instance list.
+ * \brief Loads the instance list. Triggers notifications.
*/
InstListError loadList();
- DEFINE_SIGLIST_SIGNALS(QSharedPointer<Instance>);
- SETUP_SIGLIST_SIGNALS(QSharedPointer<Instance>);
+ /*!
+ * \brief Get the instance at index
+ */
+ InstancePtr at(int i) const
+ {
+ return m_instances.at(i);
+ };
+
+ /*!
+ * \brief Get the count of loaded instances
+ */
+ int count() const
+ {
+ return m_instances.count();
+ };
+
+ /// Clear all instances. Triggers notifications.
+ void clear();
+
+ /// Add an instance. Triggers notifications, returns the new index
+ int add(InstancePtr t);
+
+ /// Get an instance by ID
+ InstancePtr getInstanceById (QString id);
+
+signals:
+ void instanceAdded(int index);
+ void instanceChanged(int index);
+ void invalidated();
+
protected:
QString m_instDir;
+ QList< InstancePtr > m_instances;
};
#endif // INSTANCELIST_H
diff --git a/libmultimc/src/instancelist.cpp b/libmultimc/src/instancelist.cpp
index 78650634..83a72afb 100644
--- a/libmultimc/src/instancelist.cpp
+++ b/libmultimc/src/instancelist.cpp
@@ -15,11 +15,10 @@
#include "include/instancelist.h"
-#include "siglist_impl.h"
-
#include <QDir>
#include <QFile>
#include <QDirIterator>
+#include <QThread>
#include "include/instance.h"
#include "include/instanceloader.h"
@@ -37,7 +36,7 @@ InstanceList::InstListError InstanceList::loadList()
{
QDir dir(m_instDir);
QDirIterator iter(dir);
-
+ m_instances.clear();
while (iter.hasNext())
{
QString subDir = iter.next();
@@ -78,10 +77,41 @@ InstanceList::InstListError InstanceList::loadList()
qDebug(QString("Loaded instance %1").arg(inst->name()).toUtf8());
inst->setParent(this);
- append(QSharedPointer<Instance>(inst));
+ m_instances.append(inst);
}
}
}
-
+ emit invalidated();
return NoError;
}
+
+/// Clear all instances. Triggers notifications.
+void InstanceList::clear()
+{
+ m_instances.clear();
+ emit invalidated();
+};
+
+/// Add an instance. Triggers notifications, returns the new index
+int InstanceList::add(InstancePtr t)
+{
+ m_instances.append(t);
+ emit instanceAdded(count() - 1);
+ return count() - 1;
+}
+
+InstancePtr InstanceList::getInstanceById(QString instId)
+{
+ QListIterator<InstancePtr> iter(m_instances);
+ InstancePtr inst;
+ while(iter.hasNext())
+ {
+ inst = iter.next();
+ if (inst->id() == instId)
+ break;
+ }
+ if (inst->id() != instId)
+ return InstancePtr();
+ else
+ return iter.peekPrevious();
+} \ No newline at end of file
diff --git a/libutil/CMakeLists.txt b/libutil/CMakeLists.txt
index 5b2c3837..11b21426 100644
--- a/libutil/CMakeLists.txt
+++ b/libutil/CMakeLists.txt
@@ -31,9 +31,6 @@ include/pathutils.h
include/osutils.h
include/userutils.h
include/cmdutils.h
-
-include/siglist.h
-include/siglist_impl.h
)
SET(LIBUTIL_SOURCES
diff --git a/main.cpp b/main.cpp
index cf193ff0..7c82d6d8 100644
--- a/main.cpp
+++ b/main.cpp
@@ -57,23 +57,6 @@ public:
this->instId = instId;
}
-private:
- InstancePtr findInstance(QString instId)
- {
- QListIterator<InstancePtr> iter(instances);
- InstancePtr inst;
- while(iter.hasNext())
- {
- inst = iter.next();
- if (inst->id() == instId)
- break;
- }
- if (inst->id() != instId)
- return InstancePtr();
- else
- return iter.peekPrevious();
- }
-
private slots:
void onTerminated()
{
@@ -117,7 +100,7 @@ public:
instances.loadList();
std::cout << "Launching Instance '" << qPrintable(instId) << "'" << std::endl;
- instance = findInstance(instId);
+ instance = instances.getInstanceById(instId);
if (instance.isNull())
{
std::cout << "Could not find instance requested. note that you have to specify the ID, not the NAME" << std::endl;