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"