NOISSUE make MultiMC respond to account manipulation better

* Setting and resetting default account will update the account list properly
* Removing the active account will now also reset it (previously, it would 'stay around')
* The accounts model is no longer reset by every action
This commit is contained in:
Petr Mrázek 2017-12-03 20:54:28 +01:00
parent 8eb1397a8a
commit d6fc37e486

View File

@ -53,34 +53,47 @@ const MojangAccountPtr MojangAccountList::at(int i) const
void MojangAccountList::addAccount(const MojangAccountPtr account) void MojangAccountList::addAccount(const MojangAccountPtr account)
{ {
beginResetModel(); int row = m_accounts.count();
beginInsertRows(QModelIndex(), row, row);
connect(account.get(), SIGNAL(changed()), SLOT(accountChanged())); connect(account.get(), SIGNAL(changed()), SLOT(accountChanged()));
m_accounts.append(account); m_accounts.append(account);
endResetModel(); endInsertRows();
onListChanged(); onListChanged();
} }
void MojangAccountList::removeAccount(const QString &username) void MojangAccountList::removeAccount(const QString &username)
{ {
beginResetModel(); int idx = 0;
for (auto account : m_accounts) for (auto account : m_accounts)
{ {
if (account->username() == username) if (account->username() == username)
{ {
beginRemoveRows(QModelIndex(), idx, idx);
m_accounts.removeOne(account); m_accounts.removeOne(account);
endRemoveRows();
return; return;
} }
idx++;
} }
endResetModel();
onListChanged(); onListChanged();
} }
void MojangAccountList::removeAccount(QModelIndex index) void MojangAccountList::removeAccount(QModelIndex index)
{ {
beginResetModel(); 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()); m_accounts.removeAt(index.row());
endResetModel(); endRemoveRows();
onListChanged(); onListChanged();
}
} }
MojangAccountPtr MojangAccountList::activeAccount() const MojangAccountPtr MojangAccountList::activeAccount() const
@ -90,21 +103,49 @@ MojangAccountPtr MojangAccountList::activeAccount() const
void MojangAccountList::setActiveAccount(const QString &username) void MojangAccountList::setActiveAccount(const QString &username)
{ {
beginResetModel(); if (username.isEmpty() && m_activeAccount)
if (username.isEmpty())
{ {
int idx = 0;
auto prevActiveAcc = m_activeAccount;
m_activeAccount = nullptr; m_activeAccount = nullptr;
for (MojangAccountPtr account : m_accounts)
{
if (account == prevActiveAcc)
{
emit dataChanged(index(idx), index(idx));
}
idx ++;
}
onActiveChanged();
} }
else else
{ {
auto currentActiveAccount = m_activeAccount;
int currentActiveAccountIdx = -1;
auto newActiveAccount = m_activeAccount;
int newActiveAccountIdx = -1;
int idx = 0;
for (MojangAccountPtr account : m_accounts) for (MojangAccountPtr account : m_accounts)
{ {
if (account->username() == username) if (account->username() == username)
m_activeAccount = account; {
newActiveAccount = account;
newActiveAccountIdx = idx;
} }
if(currentActiveAccount == account)
{
currentActiveAccountIdx = idx;
} }
endResetModel(); idx++;
}
if(currentActiveAccount != newActiveAccount)
{
emit dataChanged(index(currentActiveAccountIdx), index(currentActiveAccountIdx));
emit dataChanged(index(newActiveAccountIdx), index(newActiveAccountIdx));
m_activeAccount = newActiveAccount;
onActiveChanged(); onActiveChanged();
}
}
} }
void MojangAccountList::accountChanged() void MojangAccountList::accountChanged()
@ -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
return count(); return count();
} }
int MojangAccountList::columnCount(const QModelIndex &parent) const int MojangAccountList::columnCount(const QModelIndex &) const
{ {
return 2; return 2;
} }