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"