From 20a332e97cad70582ac9fa89e37e231dbfeed454 Mon Sep 17 00:00:00 2001 From: Sky Date: Sat, 14 Dec 2013 09:35:23 +0000 Subject: [PATCH] Make the account selection list use checkboxes rather than text for active boolean --- logic/auth/MojangAccountList.cpp | 40 +++++++++++++++++++++++++++++--- logic/auth/MojangAccountList.h | 2 ++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/logic/auth/MojangAccountList.cpp b/logic/auth/MojangAccountList.cpp index 0d13cd34..841552f5 100644 --- a/logic/auth/MojangAccountList.cpp +++ b/logic/auth/MojangAccountList.cpp @@ -148,9 +148,6 @@ QVariant MojangAccountList::data(const QModelIndex &index, int role) const case Qt::DisplayRole: switch (index.column()) { - case ActiveColumn: - return account == m_activeAccount; - case NameColumn: return account->username(); @@ -164,6 +161,13 @@ QVariant MojangAccountList::data(const QModelIndex &index, int role) const case PointerRole: return qVariantFromValue(account); + case Qt::CheckStateRole: + switch (index.column()) + { + case ActiveColumn: + return account == m_activeAccount; + } + default: return QVariant(); } @@ -212,6 +216,36 @@ int MojangAccountList::columnCount(const QModelIndex &parent) const return 2; } +Qt::ItemFlags MojangAccountList::flags(const QModelIndex &index) const +{ + if (index.row() < 0 || index.row() >= rowCount(index) || !index.isValid()) + { + return Qt::NoItemFlags; + } + + return Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable; +} + +bool MojangAccountList::setData(const QModelIndex &index, const QVariant &value, int role) +{ + if (index.row() < 0 || index.row() >= rowCount(index) || !index.isValid()) + { + return false; + } + + if(role == Qt::CheckStateRole) + { + if(value == Qt::Checked) + { + MojangAccountPtr account = this->at(index.row()); + this->setActiveAccount(account->username()); + } + } + + emit dataChanged(index, index); + return true; +} + void MojangAccountList::updateListData(QList versions) { beginResetModel(); diff --git a/logic/auth/MojangAccountList.h b/logic/auth/MojangAccountList.h index b3301bf6..c7e30958 100644 --- a/logic/auth/MojangAccountList.h +++ b/logic/auth/MojangAccountList.h @@ -64,6 +64,8 @@ public: 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; + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + virtual bool setData(const QModelIndex &index, const QVariant &value, int role); /*! * Adds a the given Mojang account to the account list.