File indexing completed on 2024-04-21 05:50:38
0001 /* 0002 SPDX-FileCopyrightText: 2014-2022 Rolf Eike Beer <kde@opensource.sf-tec.de> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "gpgservermodel.h" 0008 0009 #include <KLocalizedString> 0010 #include <QStringList> 0011 0012 GpgServerModel::GpgServerModel(QObject *parent) 0013 : QStringListModel(parent), 0014 m_defaultRow(-1) 0015 { 0016 connect(this, &GpgServerModel::rowsRemoved, this, &GpgServerModel::slotRowsRemoved); 0017 } 0018 0019 void 0020 GpgServerModel::setDefault(const int row) 0021 { 0022 Q_ASSERT(row < stringList().count()); 0023 0024 if (m_defaultRow == row) 0025 return; 0026 0027 const int oldRow = m_defaultRow; 0028 m_defaultRow = row; 0029 if (oldRow >= 0) 0030 Q_EMIT dataChanged(index(oldRow, 0), index(oldRow, 0)); 0031 if (row >= 0) 0032 Q_EMIT dataChanged(index(row, 0), index(row, 0)); 0033 } 0034 0035 void 0036 GpgServerModel::setDefault(const QString &server) 0037 { 0038 if (server.isEmpty()) { 0039 setDefault(-1); 0040 } else { 0041 const int row = stringList().indexOf(server); 0042 Q_ASSERT(row >= 0); 0043 setDefault(row); 0044 } 0045 } 0046 0047 int 0048 GpgServerModel::defaultRow() const 0049 { 0050 // only in case there is not set any default yet promote the first entry of the list 0051 if ((m_defaultRow >= 0) || stringList().empty()) 0052 return m_defaultRow; 0053 else 0054 return 0; 0055 } 0056 0057 QString 0058 GpgServerModel::defaultServer() const 0059 { 0060 const QStringList &servers = stringList(); 0061 0062 if (servers.isEmpty()) 0063 return QString(); 0064 return servers.at(qMax<int>(0, m_defaultRow)); 0065 } 0066 0067 QVariant 0068 GpgServerModel::data(const QModelIndex &index, int role) const 0069 { 0070 QVariant res = QStringListModel::data(index, role); 0071 0072 if ((role == Qt::DisplayRole) && (index.row() == m_defaultRow)) 0073 res = i18nc("Mark default keyserver in GUI", "%1 (Default)", res.toString()); 0074 0075 return res; 0076 } 0077 0078 void 0079 GpgServerModel::slotRowsRemoved(const QModelIndex &, int start, int end) 0080 { 0081 if (end < m_defaultRow) { 0082 // removed before default, i.e. default is moved up 0083 setDefault(m_defaultRow - (end - start) - 1); 0084 } else if ((start <= m_defaultRow) && (end >= m_defaultRow)) { 0085 // the default was deleted 0086 if (m_defaultRow >= rowCount()) 0087 m_defaultRow = -1; // avoid sending dataChanged() for the already deleted row 0088 if (rowCount() > 0) 0089 setDefault(0); 0090 } 0091 }