File indexing completed on 2024-05-12 17:07:45

0001 // SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
0002 // SPDX-License-Identifier: LGPL-2.0-or-later
0003 
0004 #include "savedquicksettingsmodel.h"
0005 
0006 SavedQuickSettingsModel::SavedQuickSettingsModel(QObject *parent)
0007     : QAbstractListModel{parent}
0008 {
0009 }
0010 
0011 QVariant SavedQuickSettingsModel::data(const QModelIndex &index, int role) const
0012 {
0013     if (!index.isValid() || index.row() >= m_data.count()) {
0014         return QVariant();
0015     }
0016 
0017     if (role == NameRole) {
0018         return m_data[index.row()]->name();
0019     } else if (role == IconRole) {
0020         return m_data[index.row()]->iconName();
0021     } else if (role == IdRole) {
0022         return m_data[index.row()]->pluginId();
0023     }
0024     return QVariant();
0025 }
0026 
0027 int SavedQuickSettingsModel::rowCount(const QModelIndex &parent) const
0028 {
0029     Q_UNUSED(parent);
0030     return m_data.count();
0031 }
0032 
0033 QHash<int, QByteArray> SavedQuickSettingsModel::roleNames() const
0034 {
0035     return {{NameRole, "name"}, {IdRole, "id"}, {IconRole, "icon"}};
0036 }
0037 
0038 void SavedQuickSettingsModel::moveRow(int oldIndex, int newIndex)
0039 {
0040     if (oldIndex < 0 || oldIndex >= m_data.count() || newIndex < 0 || newIndex >= m_data.count()) {
0041         return;
0042     }
0043 
0044     Q_EMIT beginMoveRows(QModelIndex(), oldIndex, oldIndex, QModelIndex(), newIndex + (oldIndex < newIndex ? 1 : 0));
0045     std::iter_swap(m_data.begin() + oldIndex, m_data.begin() + newIndex);
0046     Q_EMIT endMoveRows();
0047 
0048     Q_EMIT dataUpdated(m_data);
0049 }
0050 
0051 void SavedQuickSettingsModel::insertRow(KPluginMetaData *metaData, int index)
0052 {
0053     Q_EMIT beginInsertRows(QModelIndex(), index, index);
0054     m_data.insert(index, metaData);
0055     Q_EMIT endInsertRows();
0056 
0057     Q_EMIT dataUpdated(m_data);
0058 }
0059 
0060 void SavedQuickSettingsModel::removeRow(int index)
0061 {
0062     if (index < 0 || index >= m_data.size()) {
0063         return;
0064     }
0065 
0066     Q_EMIT beginRemoveRows(QModelIndex(), index, index);
0067     m_data.erase(m_data.begin() + index);
0068     Q_EMIT endRemoveRows();
0069 
0070     Q_EMIT dataUpdated(m_data);
0071 }
0072 
0073 QList<KPluginMetaData *> SavedQuickSettingsModel::list() const
0074 {
0075     return m_data;
0076 }
0077 
0078 void SavedQuickSettingsModel::updateData(QList<KPluginMetaData *> data)
0079 {
0080     Q_EMIT beginResetModel();
0081 
0082     m_data.clear();
0083     for (auto metaData : data) {
0084         m_data.push_back(metaData);
0085     }
0086 
0087     Q_EMIT endResetModel();
0088 
0089     Q_EMIT dataUpdated(m_data);
0090 }