~ubuntu-branches/ubuntu/lucid/kdebase/lucid

« back to all changes in this revision

Viewing changes to apps/dolphin/src/search/dolphinsearchoptionsconfigurator.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Alessandro Ghersi
  • Date: 2009-12-19 18:29:39 UTC
  • mfrom: (1.1.36 upstream)
  • Revision ID: james.westby@ubuntu.com-20091219182939-i4q5c16348k7vxuk
Tags: 4:4.3.85-0ubuntu1
* New upstream release
  - Bump build-deps

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
#include "dolphinsearchoptionsconfigurator.h"
21
21
 
22
22
#include "dolphin_searchsettings.h"
23
 
#include "searchcriterionselector.h"
 
23
#include <settings/dolphinsettings.h>
24
24
 
 
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>
28
32
 
 
33
#include "nfo.h"
 
34
 
29
35
#include <kcombobox.h>
30
36
#include <kdialog.h>
 
37
#include <kfileplacesmodel.h>
31
38
#include <kicon.h>
32
39
#include <klineedit.h>
33
40
#include <klocale.h>
34
41
#include <kseparator.h>
35
42
 
 
43
#include "searchcriterionselector.h"
 
44
 
36
45
#include <QButtonGroup>
37
46
#include <QHBoxLayout>
38
47
#include <QLabel>
80
89
DolphinSearchOptionsConfigurator::DolphinSearchOptionsConfigurator(QWidget* parent) :
81
90
    QWidget(parent),
82
91
    m_initialized(false),
 
92
    m_directory(),
83
93
    m_locationBox(0),
84
94
    m_whatBox(0),
85
95
    m_addSelectorButton(0),
106
116
    for (unsigned int i = 0; i < sizeof(g_whatItems) / sizeof(SettingsItem); ++i) {
107
117
        m_whatBox->addItem(g_whatItems[i].text);
108
118
    }
 
119
    connect(m_whatBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateButtons()));
109
120
 
110
121
    // add "Add selector" button
111
122
    m_addSelectorButton = new QPushButton(this);
175
186
    SearchSettings::self()->writeConfig();
176
187
}
177
188
 
178
 
KUrl DolphinSearchOptionsConfigurator::nepomukUrl() const
179
 
{
180
 
    Nepomuk::Query::Query query;
181
 
    if (m_criteria.size() == 1) {
182
 
        query.setTerm(m_criteria.first()->queryTerm());
183
 
    } else {
184
 
        Nepomuk::Query::AndTerm andTerm;
185
 
        foreach (const SearchCriterionSelector* criterion, m_criteria) {
186
 
            const Nepomuk::Query::Term term = criterion->queryTerm();
187
 
            andTerm.addSubTerm(term);
188
 
        }
189
 
        query.setTerm(andTerm);
190
 
    }
191
 
 
192
 
    // TODO: respect m_customSearchQuery
193
 
 
194
 
    return query.toSearchUrl();
 
189
QString DolphinSearchOptionsConfigurator::customSearchQuery() const
 
190
{
 
191
    return m_customSearchQuery;
 
192
}
 
193
 
 
194
 
 
195
KUrl DolphinSearchOptionsConfigurator::directory() const
 
196
{
 
197
    return m_directory;
 
198
}
 
199
 
 
200
KUrl DolphinSearchOptionsConfigurator::nepomukSearchUrl() const
 
201
{
 
202
    const Nepomuk::Query::Query query = nepomukQuery();
 
203
    return query.isValid() ? query.toSearchUrl() : KUrl();
195
204
}
196
205
 
197
206
void DolphinSearchOptionsConfigurator::setCustomSearchQuery(const QString& searchQuery)
198
207
{
199
208
    m_customSearchQuery = searchQuery.simplified();
 
209
    updateButtons();
 
210
}
200
211
 
201
 
    const bool enabled = hasSearchParameters();
202
 
    m_searchButton->setEnabled(enabled);
203
 
    m_saveButton->setEnabled(enabled);
 
212
void DolphinSearchOptionsConfigurator::setDirectory(const KUrl& dir)
 
213
{
 
214
    if (dir.protocol() != QString::fromLatin1("nepomuksearch")) {
 
215
        m_directory = dir;
 
216
    }
204
217
}
205
218
 
206
219
void DolphinSearchOptionsConfigurator::showEvent(QShowEvent* event)
246
259
    addCriterion(selector);
247
260
}
248
261
 
249
 
void DolphinSearchOptionsConfigurator::slotCriterionChanged()
250
 
{
251
 
    const bool enabled = hasSearchParameters();
252
 
    m_searchButton->setEnabled(enabled);
253
 
    m_saveButton->setEnabled(enabled);
254
 
}
255
 
 
256
262
void DolphinSearchOptionsConfigurator::removeCriterion()
257
263
{
258
264
    SearchCriterionSelector* criterion = qobject_cast<SearchCriterionSelector*>(sender());
264
270
 
265
271
    criterion->deleteLater();
266
272
 
267
 
    updateSelectorButton();
268
 
}
269
 
 
270
 
void DolphinSearchOptionsConfigurator::updateSelectorButton()
271
 
{
272
 
    const int selectors = m_vBoxLayout->count() - 1;
273
 
    m_addSelectorButton->setEnabled(selectors < 10);
 
273
    updateButtons();
274
274
}
275
275
 
276
276
void DolphinSearchOptionsConfigurator::saveQuery()
277
277
{
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
 
280
    // has been entered.
 
281
    QPointer<KDialog> dialog = new KDialog(0, Qt::Dialog);
279
282
 
280
 
    QWidget* container = new QWidget(&dialog);
 
283
    QWidget* container = new QWidget(dialog);
281
284
 
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);
289
292
 
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"));
295
298
 
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());
 
305
    }
 
306
    delete dialog;
 
307
}
 
308
 
 
309
void DolphinSearchOptionsConfigurator::updateButtons()
 
310
{
 
311
    const bool enable = nepomukQuery().isValid();
 
312
    m_searchButton->setEnabled(enable);
 
313
    m_saveButton->setEnabled(enable);
 
314
 
 
315
    const int selectors = m_vBoxLayout->count() - 1;
 
316
    m_addSelectorButton->setEnabled(selectors < 10);
300
317
}
301
318
 
302
319
void DolphinSearchOptionsConfigurator::addCriterion(SearchCriterionSelector* criterion)
303
320
{
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()));
306
323
 
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();
 
327
    updateButtons();
311
328
 
312
329
    m_criteria.append(criterion);
313
330
}
314
331
 
315
 
bool DolphinSearchOptionsConfigurator::hasSearchParameters() const
 
332
Nepomuk::Query::Query DolphinSearchOptionsConfigurator::nepomukQuery() const
316
333
{
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()
320
 
        return true;
321
 
    }
322
 
    return true; //nepomukUrl().path() != QLatin1String("/");
 
334
    Nepomuk::Query::AndTerm andTerm;
 
335
 
 
336
    // add search criterion terms
 
337
    foreach (const SearchCriterionSelector* criterion, m_criteria) {
 
338
        const Nepomuk::Query::Term term = criterion->queryTerm();
 
339
        andTerm.addSubTerm(term);
 
340
    }
 
341
 
 
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());
 
346
    }
 
347
 
 
348
    // filter result by the "What" filter
 
349
    switch (m_whatBox->currentIndex()) {
 
350
    case 1: {
 
351
        // Image
 
352
        const Nepomuk::Query::ResourceTypeTerm image(Nepomuk::Vocabulary::NFO::Image());
 
353
        andTerm.addSubTerm(image);
 
354
        break;
 
355
    }
 
356
    case 2: {
 
357
        // Text
 
358
        const Nepomuk::Query::ResourceTypeTerm textDocument(Nepomuk::Vocabulary::NFO::TextDocument());
 
359
        andTerm.addSubTerm(textDocument);
 
360
        break;
 
361
    }
 
362
    default: break;
 
363
    }
 
364
 
 
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);
 
369
    }
 
370
    fileQuery.setTerm(andTerm);
 
371
    return fileQuery;
323
372
}
324
373
 
325
374
#include "dolphinsearchoptionsconfigurator.moc"