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:
parent
8eb1397a8a
commit
d6fc37e486
@ -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();
|
||||||
m_accounts.removeAt(index.row());
|
if(index.isValid() && row >= 0 && row < m_accounts.size())
|
||||||
endResetModel();
|
{
|
||||||
onListChanged();
|
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
|
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;
|
||||||
|
}
|
||||||
|
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()
|
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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user