Spectral/src/accountlistmodel.cpp

78 lines
2.3 KiB
C++

#include "accountlistmodel.h"
#include "room.h"
AccountListModel::AccountListModel(QObject* parent)
: QAbstractListModel(parent) {}
void AccountListModel::setController(Controller* value) {
if (m_controller != value) {
beginResetModel();
m_connections.clear();
m_controller = value;
for (auto c : m_controller->connections()) m_connections.append(c);
connect(m_controller, &Controller::connectionAdded, this,
[=](Connection* conn) {
if (!conn) {
}
beginInsertRows(QModelIndex(), m_connections.count(),
m_connections.count());
m_connections.append(conn);
endInsertRows();
});
connect(m_controller, &Controller::connectionDropped, this,
[=](Connection* conn) {
qDebug() << "Dropping connection" << conn->userId();
if (!conn) {
qDebug() << "Trying to remove null connection";
return;
}
conn->disconnect(this);
const auto it =
std::find(m_connections.begin(), m_connections.end(), conn);
if (it == m_connections.end())
return; // Already deleted, nothing to do
const int row = it - m_connections.begin();
beginRemoveRows(QModelIndex(), row, row);
m_connections.erase(it);
endRemoveRows();
});
emit controllerChanged();
}
}
QVariant AccountListModel::data(const QModelIndex& index, int role) const {
if (!index.isValid()) return QVariant();
if (index.row() >= m_connections.count()) {
qDebug() << "AccountListModel, something's wrong: index.row() >= "
"m_users.count()";
return QVariant();
}
auto m_connection = m_connections.at(index.row());
if (role == UserRole) {
return QVariant::fromValue(m_connection->user());
}
if (role == ConnectionRole) {
return QVariant::fromValue(m_connection);
}
return QVariant();
}
int AccountListModel::rowCount(const QModelIndex& parent) const {
if (parent.isValid()) return 0;
return m_connections.count();
}
QHash<int, QByteArray> AccountListModel::roleNames() const {
QHash<int, QByteArray> roles;
roles[UserRole] = "user";
roles[ConnectionRole] = "connection";
return roles;
}