┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/search/searchcriterionselector.cpp
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2009-11-12 22:03:07 +0000
committerPeter Penz <[email protected]>2009-11-12 22:03:07 +0000
commit4f24794fc32cd94dfbd473fa8dbc4b504c20bcb3 (patch)
tree2de92b8e347dba6c826c52ceb854b5b74f881cae /src/search/searchcriterionselector.cpp
parent51dc542497510da366748304c63894f0f5feb466 (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.cpp120
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"