summaryrefslogtreecommitdiffstats
path: root/libmultimc
diff options
context:
space:
mode:
Diffstat (limited to 'libmultimc')
-rw-r--r--libmultimc/include/instversion.h5
-rw-r--r--libmultimc/include/instversionlist.h18
-rw-r--r--libmultimc/src/instversionlist.cpp95
3 files changed, 113 insertions, 5 deletions
diff --git a/libmultimc/include/instversion.h b/libmultimc/include/instversion.h
index 7de83966..9d13dbe4 100644
--- a/libmultimc/include/instversion.h
+++ b/libmultimc/include/instversion.h
@@ -40,16 +40,15 @@ public:
* \breif Returns this InstVersion's name.
* This is displayed to the user in the GUI and is usually just the version number ("1.4.7"), for example.
*/
-
virtual QString name() const = 0;
/*!
- * \brief Returns this InstVersion's name.
+ * \brief Returns this InstVersion's type name.
* This is usually displayed to the user in the GUI and specifies what
* kind of version this is. For example: it could be "Snapshot",
* "Latest Version", "MCNostalgia", etc.
*/
- virtual QString type() const = 0;
+ virtual QString typeName() const = 0;
//! Returns the version list that this InstVersion is a part of.
virtual InstVersionList *versionList() const;
diff --git a/libmultimc/include/instversionlist.h b/libmultimc/include/instversionlist.h
index 4345aaaa..24dd1a28 100644
--- a/libmultimc/include/instversionlist.h
+++ b/libmultimc/include/instversionlist.h
@@ -17,6 +17,8 @@
#define INSTVERSIONLIST_H
#include <QObject>
+#include <QVariant>
+#include <QAbstractListModel>
#include "libmmc_config.h"
@@ -29,8 +31,13 @@ class Task;
* for that instance. This list will not be loaded on startup. It will be loaded
* when the list's load function is called. Before using the version list, you
* should check to see if it has been loaded yet and if not, load the list.
+ *
+ * Note that this class also inherits from QAbstractListModel. Methods from that
+ * class determine how this version list shows up in a list view. Said methods
+ * all have a default implementation, but they can be overridden by plugins to
+ * change the behavior of the list.
*/
-class LIBMULTIMC_EXPORT InstVersionList : public QObject
+class LIBMULTIMC_EXPORT InstVersionList : public QAbstractListModel
{
Q_OBJECT
public:
@@ -39,6 +46,7 @@ public:
/*!
* \brief Gets a task that will reload the version list.
* Simply execute the task to load the list.
+ * The task returned by this function should reset the model when it's done.
* \return A pointer to a task that reloads the version list.
*/
virtual Task *getLoadTask() = 0;
@@ -52,6 +60,14 @@ public:
//! Returns the number of versions in the list.
virtual int count() const = 0;
+
+ //////// List Model Functions ////////
+ virtual QVariant data(const QModelIndex &index, int role) const;
+ virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;
+ virtual int rowCount(const QModelIndex &parent) const;
+ virtual int columnCount(const QModelIndex &parent) const;
+
+
/*!
* \brief Finds a version by its descriptor.
* \param The descriptor of the version to find.
diff --git a/libmultimc/src/instversionlist.cpp b/libmultimc/src/instversionlist.cpp
index 301b9969..6c7b44bb 100644
--- a/libmultimc/src/instversionlist.cpp
+++ b/libmultimc/src/instversionlist.cpp
@@ -17,7 +17,7 @@
#include "instversion.h"
InstVersionList::InstVersionList(QObject *parent) :
- QObject(parent)
+ QAbstractListModel(parent)
{
}
@@ -30,3 +30,96 @@ const InstVersion *InstVersionList::findVersion(const QString &descriptor)
}
return NULL;
}
+
+// Column Enum
+enum VListColumns
+{
+ // First column - Name
+ NameColumn = 0,
+
+ // Second column - Type
+ TypeColumn,
+
+ // Column count
+ ColCount
+};
+
+QVariant InstVersionList::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid())
+ return QVariant();
+
+ if (index.row() > count())
+ return QVariant();
+
+
+ const InstVersion *version = at(index.row());
+
+ switch (role)
+ {
+ case Qt::DisplayRole:
+ switch (index.column())
+ {
+ case NameColumn:
+ return version->name();
+
+ case TypeColumn:
+ return version->typeName();
+
+ default:
+ return QVariant();
+ }
+
+ case Qt::ToolTipRole:
+ return version->descriptor();
+
+ default:
+ return QVariant();
+ }
+}
+
+QVariant InstVersionList::headerData(int section, Qt::Orientation orientation, int role) const
+{
+ switch (role)
+ {
+ case Qt::DisplayRole:
+ switch (section)
+ {
+ case NameColumn:
+ return "Name";
+
+ case TypeColumn:
+ return "Type";
+
+ default:
+ return QVariant();
+ }
+
+ case Qt::ToolTipRole:
+ switch (section)
+ {
+ case NameColumn:
+ return "The name of the version.";
+
+ case TypeColumn:
+ return "The version's type.";
+
+ default:
+ return QVariant();
+ }
+
+ default:
+ return QVariant();
+ }
+}
+
+int InstVersionList::rowCount(const QModelIndex &parent) const
+{
+ // Return count
+ return count();
+}
+
+int InstVersionList::columnCount(const QModelIndex &parent) const
+{
+ return ColCount;
+}