┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/search
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2009-11-13 22:48:07 +0000
committerPeter Penz <[email protected]>2009-11-13 22:48:07 +0000
commit3d7b54b21a47e98d1d02c7d21061a6bd43b8d1c7 (patch)
tree24a1db2c4b375d6f4d3ecc4ef2a4de6506374134 /src/search
parentbd30bb6ca98374b37db20d14a41542c21acdd5e0 (diff)
Implemented initialization of value-widgets. This allows e.g. to apply dates like "today", "last week", ... to the date-value-widgets just by specifying a search criterion.
svn path=/trunk/KDE/kdebase/apps/; revision=1048771
Diffstat (limited to 'src/search')
-rw-r--r--src/search/searchcriteriondescription.h12
-rw-r--r--src/search/searchcriterionselector.cpp17
-rw-r--r--src/search/searchcriterionvalue.cpp30
-rw-r--r--src/search/searchcriterionvalue.h16
4 files changed, 64 insertions, 11 deletions
diff --git a/src/search/searchcriteriondescription.h b/src/search/searchcriteriondescription.h
index 5da188633..98211793e 100644
--- a/src/search/searchcriteriondescription.h
+++ b/src/search/searchcriteriondescription.h
@@ -38,11 +38,13 @@ class SearchCriterionDescription
public:
struct Comparator
{
- Comparator(const QString& n, const QString& o = QString(), const QString& p = QString()) :
- name(n), operation(o), prefix(p) {}
- QString name; // user visible and translated name
- QString operation; // Nepomuk operation that represents the comparator
- QString prefix; // prefix like "+" or "-" that is part of the Nepomuk query
+ Comparator(const QString& n, const QString& o = QString(),
+ const QString& p = QString(), const QString& a = QString()) :
+ name(n), operation(o), prefix(p), autoValueType(a) {}
+ QString name; // user visible and translated name
+ QString operation; // Nepomuk operation that represents the comparator
+ QString prefix; // prefix like "+" or "-" that is part of the Nepomuk query
+ QString autoValueType; // type for an automatically calculated value of the value widget
};
SearchCriterionDescription(const QString& name,
diff --git a/src/search/searchcriterionselector.cpp b/src/search/searchcriterionselector.cpp
index 4b6112b9c..104f83c1c 100644
--- a/src/search/searchcriterionselector.cpp
+++ b/src/search/searchcriterionselector.cpp
@@ -132,7 +132,13 @@ void SearchCriterionSelector::slotComparatorChanged(int index)
const int descIndex = m_descriptionsBox->currentIndex();
const SearchCriterionDescription& descr = m_descriptions[descIndex];
const SearchCriterionDescription::Comparator& comp = descr.comparators()[index];
- m_valueWidget->setVisible(!comp.operation.isEmpty());
+
+ m_valueWidget->initializeValue(comp.autoValueType);
+ if (!comp.operation.isEmpty() && comp.autoValueType.isEmpty()) {
+ // only show the value widget, if an operation is defined
+ // and no automatic calculation is provided
+ m_valueWidget->show();
+ }
emit criterionChanged();
}
@@ -152,10 +158,11 @@ void SearchCriterionSelector::createDescriptions()
// add "Date" description
QList<SearchCriterionDescription::Comparator> dateComps;
- dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Anytime"))); // TODO
- dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Today"))); // TODO
- dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "This week"))); // TODO
- dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "This month"))); // TODO
+ dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Anytime")));
+ dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Today"), ":", "+", "today"));
+ dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "This Week"), ">=", "+", "thisWeek"));
+ dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "This Month"), ">=", "+", "thisMonth"));
+ dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "This Year"), ">=", "+", "thisYear"));
foreach (const SearchCriterionDescription::Comparator& comp, defaultComps) {
dateComps.append(comp);
}
diff --git a/src/search/searchcriterionvalue.cpp b/src/search/searchcriterionvalue.cpp
index 7bf83e94f..7d8e2d8cd 100644
--- a/src/search/searchcriterionvalue.cpp
+++ b/src/search/searchcriterionvalue.cpp
@@ -42,6 +42,11 @@ SearchCriterionValue::~SearchCriterionValue()
{
}
+void SearchCriterionValue::initializeValue(const QString& valueType)
+{
+ Q_UNUSED(valueType);
+}
+
// -------------------------------------------------------------------------
DateValue::DateValue(QWidget* parent) :
@@ -64,6 +69,31 @@ QString DateValue::value() const
return m_dateWidget->date().toString(Qt::ISODate);
}
+void DateValue::initializeValue(const QString& valueType)
+{
+ if (valueType.isEmpty()) {
+ return;
+ }
+
+ QDate date;
+ if (valueType == "today") {
+ date = QDate::currentDate();
+ } else if (valueType == "thisWeek") {
+ const QDate today = QDate::currentDate();
+ const int dayOfWeek = today.dayOfWeek();
+ date = today.addDays(-dayOfWeek);
+ } else if (valueType == "thisMonth") {
+ const QDate today = QDate::currentDate();
+ date = QDate(today.year(), today.month(), 1);
+ } else if (valueType == "thisYear") {
+ date = QDate(QDate::currentDate().year(), 1, 1);
+ } else {
+ // unknown value-type
+ Q_ASSERT(false);
+ }
+ m_dateWidget->setDate(date);
+}
+
// -------------------------------------------------------------------------
TagValue::TagValue(QWidget* parent) :
diff --git a/src/search/searchcriterionvalue.h b/src/search/searchcriterionvalue.h
index 972b95f7a..652b58a7c 100644
--- a/src/search/searchcriterionvalue.h
+++ b/src/search/searchcriterionvalue.h
@@ -39,8 +39,21 @@ public:
SearchCriterionValue(QWidget* parent = 0);
virtual ~SearchCriterionValue();
+ /**
+ * Must be overwritten by derived classes and returns
+ * the string representation of the search criterion value.
+ */
virtual QString value() const = 0;
+ /**
+ * Initializes the widget on the base of the given value-type.
+ * It is in the hand of the derived classes to interprete
+ * the value-type string and create a corresponding value for
+ * the widget (@see SearchCriterionSelector::Comparator).
+ * The default implementation is empty.
+ */
+ virtual void initializeValue(const QString& valueType);
+
signals:
void valueChanged(const QString& value);
};
@@ -56,7 +69,8 @@ public:
DateValue(QWidget* parent = 0);
virtual ~DateValue();
virtual QString value() const;
-
+ virtual void initializeValue(const QString& valueType);
+
private:
KDateWidget* m_dateWidget;
};