]> cloud.milkyroute.net Git - dolphin.git/blob - src/search/selectors/dateselector.cpp
Fix up 2f208662cbd604f879027d3cd633a5ce59182a4f
[dolphin.git] / src / search / selectors / dateselector.cpp
1 /*
2 SPDX-FileCopyrightText: 2025 Felix Ernst <felixernst@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5 */
6
7 #include "dateselector.h"
8
9 #include "../dolphinquery.h"
10
11 #include <KDatePicker>
12 #include <KDatePickerPopup>
13 #include <KFormat>
14 #include <KLocalizedString>
15
16 using namespace Search;
17
18 Search::DateSelector::DateSelector(std::shared_ptr<const DolphinQuery> dolphinQuery, QWidget *parent)
19 : QToolButton{parent}
20 , UpdatableStateInterface{dolphinQuery}
21 , m_datePickerPopup{
22 new KDatePickerPopup{KDatePickerPopup::NoDate | KDatePickerPopup::DatePicker | KDatePickerPopup::Words, dolphinQuery->modifiedSinceDate(), this}}
23 {
24 setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
25 setPopupMode(QToolButton::InstantPopup);
26
27 m_datePickerPopup->setDateRange(QDate{}, QDate::currentDate());
28 connect(m_datePickerPopup, &KDatePickerPopup::dateChanged, this, [this](const QDate &activatedDate) {
29 if (activatedDate == m_searchConfiguration->modifiedSinceDate()) {
30 return; // Already selected.
31 }
32 DolphinQuery searchConfigurationCopy = *m_searchConfiguration;
33 searchConfigurationCopy.setModifiedSinceDate(activatedDate);
34 Q_EMIT configurationChanged(std::move(searchConfigurationCopy));
35 });
36 setMenu(m_datePickerPopup);
37
38 updateStateToMatch(std::move(dolphinQuery));
39 }
40
41 void DateSelector::removeRestriction()
42 {
43 Q_ASSERT(m_searchConfiguration->modifiedSinceDate().isValid());
44 DolphinQuery searchConfigurationCopy = *m_searchConfiguration;
45 searchConfigurationCopy.setModifiedSinceDate(QDate{});
46 Q_EMIT configurationChanged(std::move(searchConfigurationCopy));
47 }
48
49 void DateSelector::updateState(const std::shared_ptr<const DolphinQuery> &dolphinQuery)
50 {
51 m_datePickerPopup->setDate(dolphinQuery->modifiedSinceDate());
52 if (!dolphinQuery->modifiedSinceDate().isValid()) {
53 setIcon(QIcon{}); // No icon for the empty state
54 setText(i18nc("@item:inlistbox", "Any Date"));
55 return;
56 }
57 setIcon(QIcon::fromTheme(QStringLiteral("view-calendar")));
58 QLocale local;
59 KFormat formatter(local);
60 setText(formatter.formatRelativeDate(dolphinQuery->modifiedSinceDate(), QLocale::ShortFormat));
61 }