┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/search/selectors/dateselector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/search/selectors/dateselector.cpp')
-rw-r--r--src/search/selectors/dateselector.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/search/selectors/dateselector.cpp b/src/search/selectors/dateselector.cpp
new file mode 100644
index 000000000..2951b1dc4
--- /dev/null
+++ b/src/search/selectors/dateselector.cpp
@@ -0,0 +1,61 @@
+/*
+ SPDX-FileCopyrightText: 2025 Felix Ernst <[email protected]>
+
+ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#include "dateselector.h"
+
+#include "../dolphinquery.h"
+
+#include <KDatePicker>
+#include <KDatePickerPopup>
+#include <KFormat>
+#include <KLocalizedString>
+
+using namespace Search;
+
+Search::DateSelector::DateSelector(std::shared_ptr<const DolphinQuery> dolphinQuery, QWidget *parent)
+ : QToolButton{parent}
+ , UpdatableStateInterface{dolphinQuery}
+ , m_datePickerPopup{
+ new KDatePickerPopup{KDatePickerPopup::NoDate | KDatePickerPopup::DatePicker | KDatePickerPopup::Words, dolphinQuery->modifiedSinceDate(), this}}
+{
+ setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+ setPopupMode(QToolButton::InstantPopup);
+
+ m_datePickerPopup->setDateRange(QDate{}, QDate::currentDate());
+ connect(m_datePickerPopup, &KDatePickerPopup::dateChanged, this, [this](const QDate &activatedDate) {
+ if (activatedDate == m_searchConfiguration->modifiedSinceDate()) {
+ return; // Already selected.
+ }
+ DolphinQuery searchConfigurationCopy = *m_searchConfiguration;
+ searchConfigurationCopy.setModifiedSinceDate(activatedDate);
+ Q_EMIT configurationChanged(std::move(searchConfigurationCopy));
+ });
+ setMenu(m_datePickerPopup);
+
+ updateStateToMatch(std::move(dolphinQuery));
+}
+
+void DateSelector::removeRestriction()
+{
+ Q_ASSERT(m_searchConfiguration->modifiedSinceDate().isValid());
+ DolphinQuery searchConfigurationCopy = *m_searchConfiguration;
+ searchConfigurationCopy.setModifiedSinceDate(QDate{});
+ Q_EMIT configurationChanged(std::move(searchConfigurationCopy));
+}
+
+void DateSelector::updateState(const std::shared_ptr<const DolphinQuery> &dolphinQuery)
+{
+ m_datePickerPopup->setDate(dolphinQuery->modifiedSinceDate());
+ if (!dolphinQuery->modifiedSinceDate().isValid()) {
+ setIcon(QIcon{}); // No icon for the empty state
+ setText(i18nc("@item:inlistbox", "Any Date"));
+ return;
+ }
+ setIcon(QIcon::fromTheme(QStringLiteral("view-calendar")));
+ QLocale local;
+ KFormat formatter(local);
+ setText(formatter.formatRelativeDate(dolphinQuery->modifiedSinceDate(), QLocale::ShortFormat));
+}