20
20
#include "dolphinsearchoptionsconfigurator.h"
22
22
#include "dolphin_searchsettings.h"
23
#include "searchcriterionselector.h"
23
#include <settings/dolphinsettings.h>
25
#define DISABLE_NEPOMUK_LEGACY
25
26
#include <nepomuk/andterm.h>
26
#include <nepomuk/query.h>
27
#include <nepomuk/filequery.h>
28
#include <nepomuk/orterm.h>
29
#include <nepomuk/queryparser.h>
30
#include <nepomuk/resourcetypeterm.h>
27
31
#include <nepomuk/term.h>
29
35
#include <kcombobox.h>
30
36
#include <kdialog.h>
37
#include <kfileplacesmodel.h>
32
39
#include <klineedit.h>
33
40
#include <klocale.h>
34
41
#include <kseparator.h>
43
#include "searchcriterionselector.h"
36
45
#include <QButtonGroup>
37
46
#include <QHBoxLayout>
175
186
SearchSettings::self()->writeConfig();
178
KUrl DolphinSearchOptionsConfigurator::nepomukUrl() const
180
Nepomuk::Query::Query query;
181
if (m_criteria.size() == 1) {
182
query.setTerm(m_criteria.first()->queryTerm());
184
Nepomuk::Query::AndTerm andTerm;
185
foreach (const SearchCriterionSelector* criterion, m_criteria) {
186
const Nepomuk::Query::Term term = criterion->queryTerm();
187
andTerm.addSubTerm(term);
189
query.setTerm(andTerm);
192
// TODO: respect m_customSearchQuery
194
return query.toSearchUrl();
189
QString DolphinSearchOptionsConfigurator::customSearchQuery() const
191
return m_customSearchQuery;
195
KUrl DolphinSearchOptionsConfigurator::directory() const
200
KUrl DolphinSearchOptionsConfigurator::nepomukSearchUrl() const
202
const Nepomuk::Query::Query query = nepomukQuery();
203
return query.isValid() ? query.toSearchUrl() : KUrl();
197
206
void DolphinSearchOptionsConfigurator::setCustomSearchQuery(const QString& searchQuery)
199
208
m_customSearchQuery = searchQuery.simplified();
201
const bool enabled = hasSearchParameters();
202
m_searchButton->setEnabled(enabled);
203
m_saveButton->setEnabled(enabled);
212
void DolphinSearchOptionsConfigurator::setDirectory(const KUrl& dir)
214
if (dir.protocol() != QString::fromLatin1("nepomuksearch")) {
206
219
void DolphinSearchOptionsConfigurator::showEvent(QShowEvent* event)
265
271
criterion->deleteLater();
267
updateSelectorButton();
270
void DolphinSearchOptionsConfigurator::updateSelectorButton()
272
const int selectors = m_vBoxLayout->count() - 1;
273
m_addSelectorButton->setEnabled(selectors < 10);
276
276
void DolphinSearchOptionsConfigurator::saveQuery()
278
KDialog dialog(0, Qt::Dialog);
278
// TODO: provide a custom dialog class for KDE 4.5, which
279
// enables/disables the OK button depend on whether a text
281
QPointer<KDialog> dialog = new KDialog(0, Qt::Dialog);
280
QWidget* container = new QWidget(&dialog);
283
QWidget* container = new QWidget(dialog);
282
285
QLabel* label = new QLabel(i18nc("@label", "Name:"), container);
283
286
KLineEdit* lineEdit = new KLineEdit(container);
287
290
layout->addWidget(label, Qt::AlignRight);
288
291
layout->addWidget(lineEdit);
290
dialog.setMainWidget(container);
291
dialog.setCaption(i18nc("@title:window", "Save Search Options"));
292
dialog.setButtons(KDialog::Ok | KDialog::Cancel);
293
dialog.setDefaultButton(KDialog::Ok);
294
dialog.setButtonText(KDialog::Ok, i18nc("@action:button", "Save"));
293
dialog->setMainWidget(container);
294
dialog->setCaption(i18nc("@title:window", "Save Search Options"));
295
dialog->setButtons(KDialog::Ok | KDialog::Cancel);
296
dialog->setDefaultButton(KDialog::Ok);
297
dialog->setButtonText(KDialog::Ok, i18nc("@action:button", "Save"));
296
299
KConfigGroup dialogConfig(KSharedConfig::openConfig("dolphinrc"),
297
300
"SaveSearchOptionsDialog");
298
dialog.restoreDialogSize(dialogConfig);
299
dialog.exec(); // TODO...
301
dialog->restoreDialogSize(dialogConfig);
302
if ((dialog->exec() == QDialog::Accepted) && !lineEdit->text().isEmpty()) {
303
KFilePlacesModel* model = DolphinSettings::instance().placesModel();
304
model->addPlace(lineEdit->text(), nepomukSearchUrl());
309
void DolphinSearchOptionsConfigurator::updateButtons()
311
const bool enable = nepomukQuery().isValid();
312
m_searchButton->setEnabled(enable);
313
m_saveButton->setEnabled(enable);
315
const int selectors = m_vBoxLayout->count() - 1;
316
m_addSelectorButton->setEnabled(selectors < 10);
302
319
void DolphinSearchOptionsConfigurator::addCriterion(SearchCriterionSelector* criterion)
304
connect(criterion, SIGNAL(removeCriterion()), this, SLOT(removeCriterion()));
305
connect(criterion, SIGNAL(criterionChanged()), this, SLOT(slotCriterionChanged()));
321
connect(criterion, SIGNAL(removeCriterion()), this, SLOT(removeCriterion()));
322
connect(criterion, SIGNAL(criterionChanged()), this, SLOT(updateButtons()));
307
324
// insert the new selector before the KSeparator at the bottom
308
325
const int index = m_vBoxLayout->count() - 1;
309
326
m_vBoxLayout->insertWidget(index, criterion);
310
updateSelectorButton();
312
329
m_criteria.append(criterion);
315
bool DolphinSearchOptionsConfigurator::hasSearchParameters() const
332
Nepomuk::Query::Query DolphinSearchOptionsConfigurator::nepomukQuery() const
317
if (!m_customSearchQuery.isEmpty()) {
318
// performance optimization: if a custom search query is defined,
319
// there is no need to call the (quite expensive) method nepomukUrl()
322
return true; //nepomukUrl().path() != QLatin1String("/");
334
Nepomuk::Query::AndTerm andTerm;
336
// add search criterion terms
337
foreach (const SearchCriterionSelector* criterion, m_criteria) {
338
const Nepomuk::Query::Term term = criterion->queryTerm();
339
andTerm.addSubTerm(term);
342
// add custom query term from the searchbar
343
const Nepomuk::Query::Query customQuery = Nepomuk::Query::QueryParser::parseQuery(m_customSearchQuery);
344
if (customQuery.isValid()) {
345
andTerm.addSubTerm(customQuery.term());
348
// filter result by the "What" filter
349
switch (m_whatBox->currentIndex()) {
352
const Nepomuk::Query::ResourceTypeTerm image(Nepomuk::Vocabulary::NFO::Image());
353
andTerm.addSubTerm(image);
358
const Nepomuk::Query::ResourceTypeTerm textDocument(Nepomuk::Vocabulary::NFO::TextDocument());
359
andTerm.addSubTerm(textDocument);
365
Nepomuk::Query::FileQuery fileQuery;
366
if ((m_locationBox->currentIndex() == 1) && m_directory.isValid()) {
367
// "From Here" is selected as location filter
368
fileQuery.addIncludeFolder(m_directory);
370
fileQuery.setTerm(andTerm);
325
374
#include "dolphinsearchoptionsconfigurator.moc"