File indexing completed on 2024-05-05 17:43:12
0001 /* 0002 * SPDX-FileCopyrightText: 2017 Ivan Cukic <ivan.cukic (at) kde.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "activitieslinkingwidget.h" 0008 0009 #include "ui_activitieslinkingwidget.h" 0010 0011 #include <QItemDelegate> 0012 0013 #include <KActivities/ActivitiesModel> 0014 0015 class ActivitiesLinkingWidget::Private 0016 { 0017 public: 0018 Ui::ActivitiesLinkingWidget ui; 0019 }; 0020 0021 namespace 0022 { 0023 class CheckboxDelegate : public QItemDelegate 0024 { //_ 0025 public: 0026 CheckboxDelegate(QObject *parent) 0027 : QItemDelegate(parent) 0028 { 0029 } 0030 0031 void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override 0032 { 0033 auto wholeRect = option.rect; 0034 0035 // Drawing the checkbox 0036 auto checkRect = wholeRect; 0037 checkRect.setWidth(checkRect.height()); 0038 drawCheck(painter, option, checkRect, option.state & QStyle::State_Selected ? Qt::Checked : Qt::Unchecked); 0039 0040 // Drawing the text 0041 auto textRect = wholeRect; 0042 textRect.setLeft(textRect.left() + 8 + textRect.height()); 0043 drawDisplay(painter, option, textRect, index.data(Qt::DisplayRole).toString()); 0044 } 0045 0046 QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override 0047 { 0048 Q_UNUSED(option); 0049 Q_UNUSED(index); 0050 return QSize(100, 22); 0051 } 0052 }; //^ 0053 } 0054 0055 ActivitiesLinkingWidget::ActivitiesLinkingWidget() 0056 : DialogDsl::DialogModule(true) 0057 , d(new Private()) 0058 { 0059 d->ui.setupUi(this); 0060 0061 d->ui.listActivities->setModel(new KActivities::ActivitiesModel(this)); 0062 d->ui.listActivities->setItemDelegate(new CheckboxDelegate(this)); 0063 } 0064 0065 ActivitiesLinkingWidget::~ActivitiesLinkingWidget() 0066 { 0067 } 0068 0069 PlasmaVault::Vault::Payload ActivitiesLinkingWidget::fields() const 0070 { 0071 const auto selection = d->ui.listActivities->selectionModel(); 0072 QStringList selectedActivities; 0073 for (const auto &selectedIndex : selection->selectedIndexes()) { 0074 selectedActivities << selectedIndex.data(KActivities::ActivitiesModel::ActivityId).toString(); 0075 } 0076 0077 return {{KEY_ACTIVITIES, selectedActivities}}; 0078 } 0079 0080 void ActivitiesLinkingWidget::init(const PlasmaVault::Vault::Payload &payload) 0081 { 0082 const auto activities = payload[KEY_ACTIVITIES].toStringList(); 0083 0084 d->ui.checkLimitActivities->setChecked(false); 0085 d->ui.listActivities->setEnabled(false); 0086 0087 auto model = d->ui.listActivities->model(); 0088 auto selection = d->ui.listActivities->selectionModel(); 0089 selection->clearSelection(); 0090 0091 if (activities.size() > 0) { 0092 d->ui.checkLimitActivities->setChecked(true); 0093 d->ui.listActivities->setEnabled(true); 0094 0095 for (int row = 0; row < d->ui.listActivities->model()->rowCount(); ++row) { 0096 const auto index = model->index(row, 0); 0097 const auto activity = model->data(index, KActivities::ActivitiesModel::ActivityId).toString(); 0098 0099 if (activities.contains(activity)) { 0100 selection->select(index, QItemSelectionModel::Select); 0101 } 0102 } 0103 } 0104 }