From: Peter Penz Date: Sat, 12 Dec 2009 05:59:45 +0000 (+0000) Subject: * allow to filter the search result by images or text-documents X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/a960935b00f653d5587f9233a0e84e3ecf7ea933 * allow to filter the search result by images or text-documents * minor cleanups svn path=/trunk/KDE/kdebase/apps/; revision=1061550 --- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2b7a60e4f..c41d7f9cc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -180,6 +180,8 @@ if(Nepomuk_FOUND) ) endif(Nepomuk_FOUND) +soprano_add_ontology(dolphin_SRCS "${SHAREDDESKTOPONTOLOGIES_ROOT_DIR}/nie/nfo.trig" "NFO" "Nepomuk::Vocabulary" "trig") + if(NOT WIN32) set(dolphin_SRCS ${dolphin_SRCS} panels/terminal/terminalpanel.cpp) endif(NOT WIN32) diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index ebc8dc268..7291a1117 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -1011,8 +1011,8 @@ void DolphinMainWindow::slotTestCanDecode(const QDragMoveEvent* event, bool& can void DolphinMainWindow::searchItems() { #ifdef HAVE_NEPOMUK - const KUrl nepomukUrl = m_searchOptionsConfigurator->nepomukUrl(); - m_activeViewContainer->setUrl(nepomukUrl); + const KUrl nepomukSearchUrl = m_searchOptionsConfigurator->nepomukSearchUrl(); + m_activeViewContainer->setUrl(nepomukSearchUrl); #endif } diff --git a/src/search/dolphinsearchoptionsconfigurator.cpp b/src/search/dolphinsearchoptionsconfigurator.cpp index 006ac7302..9fd07f6cb 100644 --- a/src/search/dolphinsearchoptionsconfigurator.cpp +++ b/src/search/dolphinsearchoptionsconfigurator.cpp @@ -24,10 +24,13 @@ #define DISABLE_NEPOMUK_LEGACY #include -#include +#include #include +#include #include +#include "nfo.h" + #include #include #include @@ -111,6 +114,7 @@ DolphinSearchOptionsConfigurator::DolphinSearchOptionsConfigurator(QWidget* pare for (unsigned int i = 0; i < sizeof(g_whatItems) / sizeof(SettingsItem); ++i) { m_whatBox->addItem(g_whatItems[i].text); } + connect(m_whatBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateButtons())); // add "Add selector" button m_addSelectorButton = new QPushButton(this); @@ -180,35 +184,16 @@ DolphinSearchOptionsConfigurator::~DolphinSearchOptionsConfigurator() SearchSettings::self()->writeConfig(); } -KUrl DolphinSearchOptionsConfigurator::nepomukUrl() const +KUrl DolphinSearchOptionsConfigurator::nepomukSearchUrl() const { - Nepomuk::Query::Query query; - if (m_criteria.size() == 1) { - query.setTerm(m_criteria.first()->queryTerm()); - } else { - Nepomuk::Query::AndTerm andTerm; - foreach (const SearchCriterionSelector* criterion, m_criteria) { - const Nepomuk::Query::Term term = criterion->queryTerm(); - andTerm.addSubTerm(term); - } - query.setTerm(andTerm); - } - - Nepomuk::Query::Query customQuery = Nepomuk::Query::QueryParser::parseQuery(m_customSearchQuery); - if (customQuery.isValid()) { - query.setTerm(Nepomuk::Query::AndTerm(query.term(), customQuery.term())); - } - - return query.toSearchUrl(); + const Nepomuk::Query::Query query = nepomukQuery(); + return query.isValid() ? query.toSearchUrl() : KUrl(); } void DolphinSearchOptionsConfigurator::setCustomSearchQuery(const QString& searchQuery) { m_customSearchQuery = searchQuery.simplified(); - - const bool enabled = hasSearchParameters(); - m_searchButton->setEnabled(enabled); - m_saveButton->setEnabled(enabled); + updateButtons(); } void DolphinSearchOptionsConfigurator::showEvent(QShowEvent* event) @@ -254,13 +239,6 @@ void DolphinSearchOptionsConfigurator::slotAddSelectorButtonClicked() addCriterion(selector); } -void DolphinSearchOptionsConfigurator::slotCriterionChanged() -{ - const bool enabled = hasSearchParameters(); - m_searchButton->setEnabled(enabled); - m_saveButton->setEnabled(enabled); -} - void DolphinSearchOptionsConfigurator::removeCriterion() { SearchCriterionSelector* criterion = qobject_cast(sender()); @@ -272,13 +250,7 @@ void DolphinSearchOptionsConfigurator::removeCriterion() criterion->deleteLater(); - updateSelectorButton(); -} - -void DolphinSearchOptionsConfigurator::updateSelectorButton() -{ - const int selectors = m_vBoxLayout->count() - 1; - m_addSelectorButton->setEnabled(selectors < 10); + updateButtons(); } void DolphinSearchOptionsConfigurator::saveQuery() @@ -309,32 +281,70 @@ void DolphinSearchOptionsConfigurator::saveQuery() dialog->restoreDialogSize(dialogConfig); if ((dialog->exec() == QDialog::Accepted) && !lineEdit->text().isEmpty()) { KFilePlacesModel* model = DolphinSettings::instance().placesModel(); - model->addPlace(lineEdit->text(), nepomukUrl()); + model->addPlace(lineEdit->text(), nepomukSearchUrl()); } delete dialog; } +void DolphinSearchOptionsConfigurator::updateButtons() +{ + const bool enable = nepomukQuery().isValid(); + m_searchButton->setEnabled(enable); + m_saveButton->setEnabled(enable); + + const int selectors = m_vBoxLayout->count() - 1; + m_addSelectorButton->setEnabled(selectors < 10); +} + void DolphinSearchOptionsConfigurator::addCriterion(SearchCriterionSelector* criterion) { connect(criterion, SIGNAL(removeCriterion()), this, SLOT(removeCriterion())); - connect(criterion, SIGNAL(criterionChanged()), this, SLOT(slotCriterionChanged())); + connect(criterion, SIGNAL(criterionChanged()), this, SLOT(updateButtons())); // insert the new selector before the KSeparator at the bottom const int index = m_vBoxLayout->count() - 1; m_vBoxLayout->insertWidget(index, criterion); - updateSelectorButton(); + updateButtons(); m_criteria.append(criterion); } -bool DolphinSearchOptionsConfigurator::hasSearchParameters() const +Nepomuk::Query::Query DolphinSearchOptionsConfigurator::nepomukQuery() const { - if (!m_customSearchQuery.isEmpty()) { - // performance optimization: if a custom search query is defined, - // there is no need to call the (quite expensive) method nepomukUrl() - return true; + Nepomuk::Query::AndTerm andTerm; + + // add search criterion terms + foreach (const SearchCriterionSelector* criterion, m_criteria) { + const Nepomuk::Query::Term term = criterion->queryTerm(); + andTerm.addSubTerm(term); + } + + // add custom query term from the searchbar + const Nepomuk::Query::Query customQuery = Nepomuk::Query::QueryParser::parseQuery(m_customSearchQuery); + if (customQuery.isValid()) { + andTerm.addSubTerm(customQuery.term()); + } + + // filter result by the "What" filter + switch (m_whatBox->currentIndex()) { + case 1: { + // Image + const Nepomuk::Query::ResourceTypeTerm image(Nepomuk::Vocabulary::NFO::Image()); + andTerm.addSubTerm(image); + break; } - return true; //nepomukUrl().path() != QLatin1String("/"); + case 2: { + // Text + const Nepomuk::Query::ResourceTypeTerm textDocument(Nepomuk::Vocabulary::NFO::TextDocument()); + andTerm.addSubTerm(textDocument); + break; + } + default: break; + } + + Nepomuk::Query::Query query; + query.setTerm(andTerm); + return query; } #include "dolphinsearchoptionsconfigurator.moc" diff --git a/src/search/dolphinsearchoptionsconfigurator.h b/src/search/dolphinsearchoptionsconfigurator.h index 338f4cd3f..90adea736 100644 --- a/src/search/dolphinsearchoptionsconfigurator.h +++ b/src/search/dolphinsearchoptionsconfigurator.h @@ -21,6 +21,8 @@ #define DOLPHINSEARCHOPTIONSCONFIGURATOR_H #include +#define DISABLE_NEPOMUK_LEGACY +#include #include #include #include @@ -43,10 +45,11 @@ public: /** * Returns the sum of the configured options and the - * custom search query as Nepomuk URL. + * custom search query as Nepomuk conform search URL. If the + * query is invalid, an empty URL is returned. * @see DolphinSearchOptionsConfigurator::setCustomSearchQuery() */ - KUrl nepomukUrl() const; + KUrl nepomukSearchUrl() const; public slots: /** @@ -65,19 +68,18 @@ protected: private slots: void slotAddSelectorButtonClicked(); - void slotCriterionChanged(); void removeCriterion(); /** - * Updates the 'enabled' property of the selector button - * dependent from the number of existing selectors. + * Saves the current query by adding it as Places entry. */ - void updateSelectorButton(); + void saveQuery(); /** - * Saves the current query by adding it as Places entry. + * Enables the enabled property of the search-, save-button and the + * add-selector button. */ - void saveQuery(); + void updateButtons(); private: /** @@ -87,10 +89,11 @@ private: void addCriterion(SearchCriterionSelector* selector); /** - * Returns true, DolphinSearchOptionsConfigurator::nepomukUrl() - * contains at least 1 search parameter. + * Returns the sum of the configured options and the + * custom search query as Nepomuk confrom query. + * @see DolphinSearchOptionsConfigurator::setCustomSearchQuery() */ - bool hasSearchParameters() const; + Nepomuk::Query::Query nepomukQuery() const; private: bool m_initialized; diff --git a/src/search/searchcriterionselector.cpp b/src/search/searchcriterionselector.cpp index 641690536..4b74a5dc1 100644 --- a/src/search/searchcriterionselector.cpp +++ b/src/search/searchcriterionselector.cpp @@ -38,8 +38,6 @@ #include #include -#include - SearchCriterionSelector::SearchCriterionSelector(Type type, QWidget* parent) : QWidget(parent), m_layout(0), @@ -99,14 +97,9 @@ Nepomuk::Query::Term SearchCriterionSelector::queryTerm() const return Nepomuk::Query::Term(); } - kDebug() << "identifier:" << descr.identifier(); - kDebug() << "value:" << m_valueWidget->value(); - kDebug() << "comp:" << comp.value; - const Nepomuk::Query::ComparisonTerm term(descr.identifier(), m_valueWidget->value(), comp.value); - kDebug() << "term: " << term; return term; }