diff options
Diffstat (limited to 'libmultimc')
-rw-r--r-- | libmultimc/include/instversion.h | 5 | ||||
-rw-r--r-- | libmultimc/include/instversionlist.h | 18 | ||||
-rw-r--r-- | libmultimc/src/instversionlist.cpp | 95 |
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; +} |