File indexing completed on 2024-05-12 09:54:47

0001 /*
0002    SPDX-FileCopyrightText: 2010 Marco Mentasti <marcomentasti@gmail.com>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-only
0005 */
0006 
0007 #include "connectionmodel.h"
0008 
0009 #include <QDebug>
0010 #include <QFont>
0011 #include <QFontDatabase>
0012 #include <QFontMetrics>
0013 #include <QSize>
0014 #include <QVariant>
0015 
0016 ConnectionModel::ConnectionModel(QObject *parent)
0017     : QAbstractListModel(parent)
0018 {
0019     m_icons[Connection::UNKNOWN] = QIcon::fromTheme(QStringLiteral("user-offline"));
0020     m_icons[Connection::ONLINE] = QIcon::fromTheme(QStringLiteral("user-online"));
0021     m_icons[Connection::OFFLINE] = QIcon::fromTheme(QStringLiteral("user-offline"));
0022     m_icons[Connection::REQUIRE_PASSWORD] = QIcon::fromTheme(QStringLiteral("user-invisible"));
0023 }
0024 
0025 ConnectionModel::~ConnectionModel()
0026 {
0027 }
0028 
0029 int ConnectionModel::rowCount(const QModelIndex &parent) const
0030 {
0031     Q_UNUSED(parent);
0032 
0033     return m_connections.count();
0034 }
0035 
0036 QVariant ConnectionModel::data(const QModelIndex &index, int role) const
0037 {
0038     if (!index.isValid()) {
0039         return QVariant();
0040     }
0041 
0042     const QString key = m_connections.keys().at(index.row());
0043 
0044     switch (role) {
0045     case Qt::DisplayRole:
0046         return QVariant(m_connections.value(key).name);
0047 
0048     case Qt::UserRole:
0049         return QVariant::fromValue<Connection>(m_connections.value(key));
0050 
0051     case Qt::DecorationRole:
0052         return m_icons[m_connections.value(key).status];
0053 
0054     case Qt::SizeHintRole: {
0055         const QFontMetrics metrics(QFontDatabase::systemFont(QFontDatabase::GeneralFont));
0056         return QSize(metrics.boundingRect(m_connections.value(key).name).width(), 22);
0057     }
0058 
0059     default:
0060         return QVariant();
0061     }
0062 
0063     return QVariant();
0064 }
0065 
0066 int ConnectionModel::addConnection(const Connection &conn)
0067 {
0068     /// FIXME
0069     if (m_connections.contains(conn.name)) {
0070         qDebug() << "a connection named" << conn.name << "already exists!";
0071         return -1;
0072     }
0073 
0074     int pos = m_connections.count();
0075 
0076     beginInsertRows(QModelIndex(), pos, pos);
0077 
0078     m_connections[conn.name] = conn;
0079 
0080     endInsertRows();
0081 
0082     return m_connections.keys().indexOf(conn.name);
0083 }
0084 
0085 void ConnectionModel::removeConnection(const QString &name)
0086 {
0087     int pos = m_connections.keys().indexOf(name);
0088 
0089     beginRemoveRows(QModelIndex(), pos, pos);
0090 
0091     m_connections.remove(name);
0092 
0093     endRemoveRows();
0094 }
0095 
0096 int ConnectionModel::indexOf(const QString &name)
0097 {
0098     return m_connections.keys().indexOf(name);
0099 }
0100 
0101 Connection::Status ConnectionModel::status(const QString &name) const
0102 {
0103     if (!m_connections.contains(name)) {
0104         return Connection::UNKNOWN;
0105     }
0106 
0107     return m_connections[name].status;
0108 }
0109 
0110 void ConnectionModel::setStatus(const QString &name, const Connection::Status status)
0111 {
0112     if (!m_connections.contains(name)) {
0113         return;
0114     }
0115 
0116     m_connections[name].status = status;
0117 
0118     const int i = indexOf(name);
0119 
0120     Q_EMIT dataChanged(index(i), index(i));
0121 }
0122 
0123 void ConnectionModel::setPassword(const QString &name, const QString &password)
0124 {
0125     if (!m_connections.contains(name)) {
0126         return;
0127     }
0128 
0129     m_connections[name].password = password;
0130 
0131     const int i = indexOf(name);
0132 
0133     Q_EMIT dataChanged(index(i), index(i));
0134 }
0135 
0136 #include "moc_connectionmodel.cpp"