Incidenceeditor

incidencecompletionpriority.cpp
1/*
2 SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
3 SPDX-FileContributor: Kevin Krammer <krake@kdab.com>
4
5 SPDX-License-Identifier: LGPL-2.0-or-later
6*/
7
8#include "incidencecompletionpriority.h"
9using namespace Qt::Literals::StringLiterals;
10
11#include "ui_dialogdesktop.h"
12
13#include <KCalendarCore/Todo>
14
15using namespace IncidenceEditorNG;
16
17class IncidenceEditorNG::IncidenceCompletionPriorityPrivate
18{
19 IncidenceCompletionPriority *const q;
20
21public:
22 explicit IncidenceCompletionPriorityPrivate(IncidenceCompletionPriority *parent)
23 : q(parent)
24 {
25 }
26
27public:
28 Ui::EventOrTodoDesktop *mUi = nullptr;
29 int mOrigPercentCompleted = -1;
30
31public: // slots
32 void sliderValueChanged(int);
33};
34
35void IncidenceCompletionPriorityPrivate::sliderValueChanged(int value)
36{
37 if (q->sender() == mUi->mCompletionSlider) {
38 mOrigPercentCompleted = -1;
39 }
40
41 mUi->mCompletedLabel->setText(QStringLiteral("%1%").arg(value));
42 q->checkDirtyStatus();
43}
44
45IncidenceCompletionPriority::IncidenceCompletionPriority(Ui::EventOrTodoDesktop *ui)
46 : d(new IncidenceCompletionPriorityPrivate(this))
47{
48 Q_ASSERT(ui != nullptr);
49 setObjectName("IncidenceCompletionPriority"_L1);
50
51 d->mUi = ui;
52
53 d->sliderValueChanged(d->mUi->mCompletionSlider->value());
54 d->mUi->mCompletionPriorityWidget->hide();
55 d->mUi->mTaskLabel->hide();
56 const QFontMetrics metrics(d->mUi->mCompletedLabel->font());
57 d->mUi->mCompletedLabel->setMinimumWidth(metrics.boundingRect(QStringLiteral("100%")).width());
58 d->mUi->mTaskSeparator->hide();
59
60 connect(d->mUi->mCompletionSlider, &QSlider::valueChanged, this, [this](int val) {
61 d->sliderValueChanged(val);
62 });
64}
65
66IncidenceCompletionPriority::~IncidenceCompletionPriority() = default;
67
68void IncidenceCompletionPriority::load(const KCalendarCore::Incidence::Ptr &incidence)
69{
70 mLoadedIncidence = incidence;
71
72 // TODO priority might be valid for other incidence types as well
73 // only for Todos
75 if (todo == nullptr) {
76 mWasDirty = false;
77 return;
78 }
79
80 d->mUi->mCompletionPriorityWidget->show();
81 d->mUi->mTaskLabel->show();
82 d->mUi->mTaskSeparator->show();
83
84 d->mOrigPercentCompleted = todo->percentComplete();
85 d->mUi->mCompletionSlider->blockSignals(true);
86 d->mUi->mCompletionSlider->setValue(todo->percentComplete());
87 d->sliderValueChanged(d->mUi->mCompletionSlider->value());
88 d->mUi->mCompletionSlider->blockSignals(false);
89
90 d->mUi->mPriorityCombo->blockSignals(true);
91 d->mUi->mPriorityCombo->setCurrentIndex(todo->priority());
92 d->mUi->mPriorityCombo->blockSignals(false);
93
94 mWasDirty = false;
95}
96
97void IncidenceCompletionPriority::save(const KCalendarCore::Incidence::Ptr &incidence)
98{
99 // TODO priority might be valid for other incidence types as well
100 // only for Todos
102 if (todo == nullptr) {
103 return;
104 }
105
106 // we only have multiples of ten on our combo. If the combo did not change its value,
107 // see if we have an original value to restore
108 if (d->mOrigPercentCompleted != -1) {
109 todo->setPercentComplete(d->mOrigPercentCompleted);
110 } else {
111 const int pct = d->mUi->mCompletionSlider->value();
112 if (pct >= 100) {
113 todo->setCompleted(QDateTime::currentDateTimeUtc());
115 } else {
116 todo->setCompleted(false);
118 }
119 todo->setPercentComplete(pct);
120 }
121 todo->setPriority(d->mUi->mPriorityCombo->currentIndex());
122}
123
124bool IncidenceCompletionPriority::isDirty() const
125{
127
128 if (!todo) {
129 return false;
130 }
131
132 if (d->mUi->mCompletionSlider->value() != todo->percentComplete()) {
133 return true;
134 }
135
136 if (d->mUi->mPriorityCombo->currentIndex() != todo->priority()) {
137 return true;
138 }
139
140 return false;
141}
142
143#include "moc_incidencecompletionpriority.cpp"
void checkDirtyStatus()
Checks if the dirty status has changed until last check and emits the dirtyStatusChanged signal if ne...
QSharedPointer< IncidenceT > incidence() const
Convenience method to get a pointer for a specific const Incidence Type.
QSharedPointer< Incidence > Ptr
QSharedPointer< Todo > Ptr
AKONADI_CALENDAR_EXPORT KCalendarCore::Todo::Ptr todo(const Akonadi::Item &item)
void valueChanged(int value)
void currentIndexChanged(int index)
QDateTime currentDateTimeUtc()
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri May 2 2025 12:03:23 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.