diff options
| author | Peter Penz <[email protected]> | 2009-11-13 22:48:07 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2009-11-13 22:48:07 +0000 |
| commit | 3d7b54b21a47e98d1d02c7d21061a6bd43b8d1c7 (patch) | |
| tree | 24a1db2c4b375d6f4d3ecc4ef2a4de6506374134 /src/search | |
| parent | bd30bb6ca98374b37db20d14a41542c21acdd5e0 (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.h | 12 | ||||
| -rw-r--r-- | src/search/searchcriterionselector.cpp | 17 | ||||
| -rw-r--r-- | src/search/searchcriterionvalue.cpp | 30 | ||||
| -rw-r--r-- | src/search/searchcriterionvalue.h | 16 |
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; }; |
