summaryrefslogtreecommitdiffstats
path: root/api/logic/minecraft/auth/MojangAccountList.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'api/logic/minecraft/auth/MojangAccountList.cpp')
-rw-r--r--api/logic/minecraft/auth/MojangAccountList.cpp75
1 files changed, 58 insertions, 17 deletions
diff --git a/api/logic/minecraft/auth/MojangAccountList.cpp b/api/logic/minecraft/auth/MojangAccountList.cpp
index bcda1703..21ae188a 100644
--- a/api/logic/minecraft/auth/MojangAccountList.cpp
+++ b/api/logic/minecraft/auth/MojangAccountList.cpp
@@ -1,4 +1,4 @@
-/* Copyright 2013-2017 MultiMC Contributors
+/* Copyright 2013-2018 MultiMC Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -53,34 +53,47 @@ const MojangAccountPtr MojangAccountList::at(int i) const
void MojangAccountList::addAccount(const MojangAccountPtr account)
{
- beginResetModel();
+ int row = m_accounts.count();
+ beginInsertRows(QModelIndex(), row, row);
connect(account.get(), SIGNAL(changed()), SLOT(accountChanged()));
m_accounts.append(account);
- endResetModel();
+ endInsertRows();
onListChanged();
}
void MojangAccountList::removeAccount(const QString &username)
{
- beginResetModel();
+ int idx = 0;
for (auto account : m_accounts)
{
if (account->username() == username)
{
+ beginRemoveRows(QModelIndex(), idx, idx);
m_accounts.removeOne(account);
+ endRemoveRows();
return;
}
+ idx++;
}
- endResetModel();
onListChanged();
}
void MojangAccountList::removeAccount(QModelIndex index)
{
- beginResetModel();
- m_accounts.removeAt(index.row());
- endResetModel();
- onListChanged();
+ int row = index.row();
+ if(index.isValid() && row >= 0 && row < m_accounts.size())
+ {
+ auto & account = m_accounts[row];
+ if(account == m_activeAccount)
+ {
+ m_activeAccount = nullptr;
+ onActiveChanged();
+ }
+ beginRemoveRows(QModelIndex(), row, row);
+ m_accounts.removeAt(index.row());
+ endRemoveRows();
+ onListChanged();
+ }
}
MojangAccountPtr MojangAccountList::activeAccount() const
@@ -90,21 +103,49 @@ MojangAccountPtr MojangAccountList::activeAccount() const
void MojangAccountList::setActiveAccount(const QString &username)
{
- beginResetModel();
- if (username.isEmpty())
+ if (username.isEmpty() && m_activeAccount)
{
+ int idx = 0;
+ auto prevActiveAcc = m_activeAccount;
m_activeAccount = nullptr;
+ for (MojangAccountPtr account : m_accounts)
+ {
+ if (account == prevActiveAcc)
+ {
+ emit dataChanged(index(idx), index(idx));
+ }
+ idx ++;
+ }
+ onActiveChanged();
}
else
{
+ auto currentActiveAccount = m_activeAccount;
+ int currentActiveAccountIdx = -1;
+ auto newActiveAccount = m_activeAccount;
+ int newActiveAccountIdx = -1;
+ int idx = 0;
for (MojangAccountPtr account : m_accounts)
{
if (account->username() == username)
- m_activeAccount = account;
+ {
+ newActiveAccount = account;
+ newActiveAccountIdx = idx;
+ }
+ if(currentActiveAccount == account)
+ {
+ currentActiveAccountIdx = idx;
+ }
+ idx++;
+ }
+ if(currentActiveAccount != newActiveAccount)
+ {
+ emit dataChanged(index(currentActiveAccountIdx), index(currentActiveAccountIdx));
+ emit dataChanged(index(newActiveAccountIdx), index(newActiveAccountIdx));
+ m_activeAccount = newActiveAccount;
+ onActiveChanged();
}
}
- endResetModel();
- onActiveChanged();
}
void MojangAccountList::accountChanged()
@@ -167,7 +208,7 @@ QVariant MojangAccountList::data(const QModelIndex &index, int role) const
switch (index.column())
{
case ActiveColumn:
- return account == m_activeAccount;
+ return account == m_activeAccount ? Qt::Checked : Qt::Unchecked;
}
default:
@@ -207,13 +248,13 @@ QVariant MojangAccountList::headerData(int section, Qt::Orientation orientation,
}
}
-int MojangAccountList::rowCount(const QModelIndex &parent) const
+int MojangAccountList::rowCount(const QModelIndex &) const
{
// Return count
return count();
}
-int MojangAccountList::columnCount(const QModelIndex &parent) const
+int MojangAccountList::columnCount(const QModelIndex &) const
{
return 2;
}