File indexing completed on 2024-06-23 05:49:08

0001 /*
0002     This file is part of the Okteta Kasten module, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2010, 2012 Friedrich W. H. Kossebau <kossebau@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #include "viewprofiletablemodel.hpp"
0010 
0011 // Okteta Gui Kasten
0012 #include <Kasten/Okteta/ByteArrayViewProfileManager>
0013 // KF
0014 #include <KColorScheme>
0015 #include <KLocalizedString>
0016 // Qt
0017 #include <QApplication>
0018 #include <QVector>
0019 #include <QIcon>
0020 
0021 namespace Kasten {
0022 
0023 ViewProfileTableModel::ViewProfileTableModel(const ByteArrayViewProfileManager* viewProfileManager,
0024                                              QObject* parent)
0025     : QAbstractTableModel(parent)
0026     , mViewProfileManager(viewProfileManager)
0027 {
0028     connect(viewProfileManager, &ByteArrayViewProfileManager::viewProfilesChanged,
0029             this, &ViewProfileTableModel::onViewProfilesChanged);
0030     connect(viewProfileManager, &ByteArrayViewProfileManager::viewProfilesRemoved,
0031             this, &ViewProfileTableModel::onViewProfilesChanged);
0032     connect(viewProfileManager, &ByteArrayViewProfileManager::defaultViewProfileChanged,
0033             this, &ViewProfileTableModel::onDefaultIndexChanged);
0034     connect(viewProfileManager, &ByteArrayViewProfileManager::viewProfilesLocked,
0035             this, &ViewProfileTableModel::onViewProfilesChanged);
0036     connect(viewProfileManager, &ByteArrayViewProfileManager::viewProfilesUnlocked,
0037             this, &ViewProfileTableModel::onViewProfileLocksChanged);
0038 }
0039 
0040 ViewProfileTableModel::~ViewProfileTableModel() = default;
0041 
0042 int ViewProfileTableModel::rowCount(const QModelIndex& parent) const
0043 {
0044     return (!parent.isValid()) ? mViewProfileManager->viewProfilesCount() : 0;
0045 }
0046 
0047 int ViewProfileTableModel::columnCount(const QModelIndex& parent) const
0048 {
0049     return (!parent.isValid()) ? NoOfColumnIds : 0;
0050 }
0051 
0052 QVariant ViewProfileTableModel::data(const QModelIndex& index, int role) const
0053 {
0054     QVariant result;
0055     switch (role)
0056     {
0057     case Qt::DisplayRole:
0058     {
0059         const int viewProfileIndex = index.row();
0060 
0061         const int tableColumn = index.column();
0062         switch (tableColumn)
0063         {
0064         case NameColumnId:
0065         {
0066             result = mViewProfileManager->viewProfiles().at(viewProfileIndex).viewProfileTitle();
0067             break;
0068         }
0069         default:
0070             ;
0071         }
0072         break;
0073     }
0074     case Qt::DecorationRole:
0075     {
0076         const int tableColumn = index.column();
0077         if (tableColumn == CurrentColumnId) {
0078             const int viewProfileIndex = index.row();
0079             const ByteArrayViewProfile::Id viewProfileId =
0080                 mViewProfileManager->viewProfiles().at(viewProfileIndex).id();
0081 
0082             if (mViewProfileManager->defaultViewProfileId() == viewProfileId) {
0083                 result = QIcon::fromTheme(QStringLiteral("starred-symbolic"));
0084             }
0085         }
0086         break;
0087     }
0088     case Qt::ForegroundRole:
0089     {
0090         const int viewProfileIndex = index.row();
0091         const ByteArrayViewProfile::Id viewProfileId =
0092             mViewProfileManager->viewProfiles().at(viewProfileIndex).id();
0093 
0094         if (mViewProfileManager->isViewProfileLocked(viewProfileId)) {
0095             const QPalette& palette = QApplication::palette();
0096             const KColorScheme colorScheme(palette.currentColorGroup(), KColorScheme::View);
0097             result = colorScheme.foreground(KColorScheme::InactiveText);
0098         }
0099         break;
0100     }
0101     }
0102 
0103     return result;
0104 }
0105 
0106 ByteArrayViewProfile::Id
0107 ViewProfileTableModel::viewProfileId(const QModelIndex& index) const
0108 {
0109     const int viewProfileIndex = index.row();
0110     const bool isValidIndex =
0111         (0 <= viewProfileIndex) && (viewProfileIndex < mViewProfileManager->viewProfilesCount());
0112 
0113     return isValidIndex ? mViewProfileManager->viewProfiles().at(viewProfileIndex).id() : ByteArrayViewProfile::Id();
0114 }
0115 
0116 int
0117 ViewProfileTableModel::row(const ByteArrayViewProfile::Id& viewProfileId) const
0118 {
0119     int result = -1;
0120 
0121     const QVector<ByteArrayViewProfile> viewProfiles = mViewProfileManager->viewProfiles();
0122     const int viewProfilesCount = viewProfiles.size();
0123     for (int i = 0; i < viewProfilesCount; ++i) {
0124         if (viewProfileId == viewProfiles.at(i).id()) {
0125             result = i;
0126             break;
0127         }
0128     }
0129 
0130     return result;
0131 }
0132 
0133 void ViewProfileTableModel::onDefaultIndexChanged()
0134 {
0135     // simply reset the whole column, does not happen often and not worth to cache the old default
0136     Q_EMIT dataChanged(index(CurrentColumnId, 0),
0137         index(CurrentColumnId, mViewProfileManager->viewProfiles().size() - 1));
0138 }
0139 
0140 void ViewProfileTableModel::onViewProfilesChanged()
0141 {
0142     beginResetModel();
0143     endResetModel();
0144 }
0145 
0146 void ViewProfileTableModel::onViewProfileLocksChanged(const QVector<ByteArrayViewProfile::Id>& viewProfileIds)
0147 {
0148     const QVector<ByteArrayViewProfile> viewProfiles = mViewProfileManager->viewProfiles();
0149     const int viewProfilesCount = viewProfiles.size();
0150     for (int i = 0; i < viewProfilesCount; ++i) {
0151         const ByteArrayViewProfile::Id viewProfileId = viewProfiles.at(i).id();
0152 
0153         if (viewProfileIds.contains(viewProfileId)) {
0154             Q_EMIT dataChanged(index(CurrentColumnId, i),
0155                 index(NameColumnId,    i));
0156         }
0157     }
0158 }
0159 
0160 }
0161 
0162 #include "moc_viewprofiletablemodel.cpp"