diff options
| author | Peter Penz <[email protected]> | 2009-11-12 22:03:07 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2009-11-12 22:03:07 +0000 |
| commit | 4f24794fc32cd94dfbd473fa8dbc4b504c20bcb3 (patch) | |
| tree | 2de92b8e347dba6c826c52ceb854b5b74f881cae /src/search/searchcriterionselector.cpp | |
| parent | 51dc542497510da366748304c63894f0f5feb466 (diff) | |
initial code to provide a Nepomuk query string out of the search criterions
svn path=/trunk/KDE/kdebase/apps/; revision=1048202
Diffstat (limited to 'src/search/searchcriterionselector.cpp')
| -rw-r--r-- | src/search/searchcriterionselector.cpp | 120 |
1 files changed, 68 insertions, 52 deletions
diff --git a/src/search/searchcriterionselector.cpp b/src/search/searchcriterionselector.cpp index 08987153a..34756cc30 100644 --- a/src/search/searchcriterionselector.cpp +++ b/src/search/searchcriterionselector.cpp @@ -73,6 +73,63 @@ SearchCriterionSelector::~SearchCriterionSelector() { } +QString SearchCriterionSelector::queryString() const +{ + if (m_valueWidget == 0) { + return QString(); + } + + const int descIndex = m_descriptionsBox->currentIndex(); + const SearchCriterionDescription& descr = m_descriptions[descIndex]; + + const int compIndex = m_comparatorBox->currentIndex(); + const SearchCriterionDescription::Comparator& comp = descr.comparators()[compIndex]; + + return comp.prefix + descr.identifier() + comp.operation + + '"' + m_valueWidget->value() + '"'; +} + +void SearchCriterionSelector::slotDescriptionChanged(int index) +{ + if (m_valueWidget != 0) { + m_valueWidget->hide(); + m_layout->removeWidget(m_valueWidget); + m_valueWidget = 0; + // the value widget is obtained by the Search Criterion + // Selector instance and may not get deleted + } + + // add comparator items + disconnect(m_comparatorBox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotComparatorChanged(int))); + m_comparatorBox->clear(); + + const SearchCriterionDescription& description = m_descriptions[index]; + foreach (const SearchCriterionDescription::Comparator& comp, description.comparators()) { + m_comparatorBox->addItem(comp.name); + } + + // add value widget + m_valueWidget = description.valueWidget(); + m_layout->insertWidget(2, m_valueWidget); + + m_comparatorBox->setCurrentIndex(0); + slotComparatorChanged(0); + connect(m_comparatorBox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotComparatorChanged(int))); +} + +void SearchCriterionSelector::slotComparatorChanged(int index) +{ + Q_ASSERT(index >= 0); + + // only show the value widget if an operation is defined by the comparator + 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()); + + emit criterionChanged(); +} + void SearchCriterionSelector::createDescriptions() { Q_ASSERT(m_descriptionsBox != 0); @@ -98,8 +155,8 @@ void SearchCriterionSelector::createDescriptions() DateValue* dateValue = new DateValue(this); dateValue->hide(); - SearchCriterionDescription date(i18nc("@label", "Date"), - "sourceModified", + SearchCriterionDescription date(i18nc("@label", "Date:"), + "lastModified", dateComps, dateValue); @@ -109,7 +166,7 @@ void SearchCriterionSelector::createDescriptions() SizeValue* sizeValue = new SizeValue(this); sizeValue->hide(); - SearchCriterionDescription size(i18nc("@label", "Size"), + SearchCriterionDescription size(i18nc("@label", "Size:"), "contentSize", sizeComps, sizeValue); @@ -117,11 +174,11 @@ void SearchCriterionSelector::createDescriptions() // add "Tag" description QList<SearchCriterionDescription::Comparator> tagComps; tagComps.append(SearchCriterionDescription::Comparator(i18nc("@label All (tags)", "All"))); - tagComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Equal to"), "==")); + tagComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Equal to"), ":")); TagValue* tagValue = new TagValue(this); tagValue->hide(); - SearchCriterionDescription tag(i18nc("@label", "Tag"), + SearchCriterionDescription tag(i18nc("@label", "Tag:"), "tag", tagComps, tagValue); @@ -133,54 +190,13 @@ void SearchCriterionSelector::createDescriptions() m_descriptions.append(size); m_descriptions.append(tag); - // add all descriptions to the combo box - const int count = m_descriptions.count(); - for (int i = 0; i < count; ++i) { - m_descriptionsBox->addItem(m_descriptions[i].name(), i); - } -} - -void SearchCriterionSelector::slotDescriptionChanged(int index) -{ - if (m_valueWidget != 0) { - m_valueWidget->hide(); - m_layout->removeWidget(m_valueWidget); - m_valueWidget = 0; - // the value widget is obtained by the Search Criterion - // Selector instance and may not get deleted - } - - // add comparator items - disconnect(m_comparatorBox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotComparatorChanged(int))); - m_comparatorBox->clear(); - - const SearchCriterionDescription& description = m_descriptions[index]; - foreach (const SearchCriterionDescription::Comparator& comp, description.comparators()) { - m_comparatorBox->addItem(comp.name); + // add all descriptions to the combo box and connect the value widgets + int i = 0; + foreach (const SearchCriterionDescription& desc, m_descriptions) { + m_descriptionsBox->addItem(desc.name(), i); + connect(desc.valueWidget(), SIGNAL(valueChanged(QString)), this, SIGNAL(criterionChanged())); + ++i; } - - // add value widget - m_valueWidget = description.valueWidget(); - m_layout->insertWidget(2, m_valueWidget); - - m_comparatorBox->setCurrentIndex(0); - slotComparatorChanged(0); - connect(m_comparatorBox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotComparatorChanged(int))); -} - -void SearchCriterionSelector::slotComparatorChanged(int index) -{ - Q_ASSERT(index >= 0); - - // only show the value widget if an operation is defined by the comparator - 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()); - - // create query string - const QString queryString = comp.prefix + descr.identifier() + comp.operation + m_valueWidget->value(); - emit criterionChanged(queryString); } #include "searchcriterionselector.moc" |
