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 }