From: Peter Penz Date: Fri, 13 Nov 2009 22:48:07 +0000 (+0000) Subject: Implemented initialization of value-widgets. This allows e.g. to apply dates like... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/3d7b54b21a47e98d1d02c7d21061a6bd43b8d1c7 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 --- diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index bdeaab258..5639d9bf2 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -284,7 +284,7 @@ void DolphinViewContainer::updateStatusBar() void DolphinViewContainer::initializeProgress() { - if (m_view->url().protocol() == "nepomuksearch") { + if (url().protocol() == "nepomuksearch") { // The Nepomuk IO-slave does not provide any progress information. Give // an immediate hint to the user that a searching is done: m_statusBar->setProgressText(i18nc("@info", "Searching...")); @@ -307,7 +307,13 @@ void DolphinViewContainer::slotDirListerCompleted() m_statusBar->setProgress(100); } - updateStatusBar(); + if ((url().protocol() == "nepomuksearch") && (m_dirLister->items().count() == 0)) { + // The dir lister has been completed on a Nepomuk-URI and no items have been found. Instead + // of showing the default status bar information ("0 items") a more helpful information is given: + m_statusBar->setMessage(i18nc("@info:status", "No items found."), DolphinStatusBar::Information); + } else { + updateStatusBar(); + } QMetaObject::invokeMethod(this, "restoreContentsPos", Qt::QueuedConnection); // Enable the 'File'->'Create New...' menu only if the directory 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 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; };