#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 AccountListModel::roleNames() const { QHash roles; roles[UserRole] = "user"; roles[ConnectionRole] = "connection"; return roles; }