[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/kspread/database
From: Stefan Nikolaus <nikolaus4 () googlemail ! com>
Date: 2007-07-21 9:39:47
Message-ID: 1185010787.607406.6362.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 690494 by nikolaus:
Database Filtering.
Get the subfilter composition right.
M +63 -0 Filter.cpp
M +1 -0 Filter.h
M +4 -8 FilterPopup.cpp
--- trunk/koffice/kspread/database/Filter.cpp #690493:690494
@@ -570,6 +570,69 @@
}
}
+void Filter::addSubFilter(Composition composition, const Filter& filter)
+{
+ if (!d->condition)
+ {
+ if (!filter.d->condition)
+ d->condition = 0;
+ else if (filter.d->condition->type() == AbstractCondition::And)
+ d->condition = new And(*static_cast<And*>(filter.d->condition));
+ else if (filter.d->condition->type() == AbstractCondition::Or)
+ d->condition = new Or(*static_cast<Or*>(filter.d->condition));
+ else // if (filter.d->condition->type() == AbstractCondition::Condition)
+ d->condition = new \
Condition(*static_cast<Condition*>(filter.d->condition)); + }
+ else if (composition == AndComposition)
+ {
+ if (filter.d->condition && d->condition->type() == AbstractCondition::And)
+ {
+ if (filter.d->condition->type() == AbstractCondition::And)
+ static_cast<And*>(d->condition)->list += \
static_cast<And*>(filter.d->condition)->list; + else if \
(filter.d->condition->type() == AbstractCondition::Or) + \
static_cast<And*>(d->condition)->list.append(new \
Or(*static_cast<Or*>(filter.d->condition))); + else // if \
(filter.d->condition->type() == AbstractCondition::Condition) + \
static_cast<And*>(d->condition)->list.append(new \
Condition(*static_cast<Condition*>(filter.d->condition))); + }
+ else if (filter.d->condition)
+ {
+ And* andComposition = new And();
+ andComposition->list.append(d->condition);
+ if (filter.d->condition->type() == AbstractCondition::And)
+ andComposition->list += \
static_cast<And*>(filter.d->condition)->list; + else if \
(filter.d->condition->type() == AbstractCondition::Or) + \
andComposition->list.append(new Or(*static_cast<Or*>(filter.d->condition))); + \
else // if (filter.d->condition->type() == AbstractCondition::Condition) + \
andComposition->list.append(new \
Condition(*static_cast<Condition*>(filter.d->condition))); + d->condition \
= andComposition; + }
+ }
+ else // composition == OrComposition
+ {
+ if (filter.d->condition && d->condition->type() == AbstractCondition::Or)
+ {
+ if (filter.d->condition->type() == AbstractCondition::And)
+ static_cast<Or*>(d->condition)->list.append(new \
And(*static_cast<And*>(filter.d->condition))); + else if \
(filter.d->condition->type() == AbstractCondition::Or) + \
static_cast<Or*>(d->condition)->list += static_cast<Or*>(filter.d->condition)->list; \
+ else // if (filter.d->condition->type() == AbstractCondition::Condition) \
+ static_cast<Or*>(d->condition)->list.append(new \
Condition(*static_cast<Condition*>(filter.d->condition))); + }
+ else if (filter.d->condition)
+ {
+ Or* orComposition = new Or();
+ orComposition->list.append(d->condition);
+ if (filter.d->condition->type() == AbstractCondition::And)
+ orComposition->list.append(new \
And(*static_cast<And*>(filter.d->condition))); + else if \
(filter.d->condition->type() == AbstractCondition::Or) + \
orComposition->list += static_cast<Or*>(filter.d->condition)->list; + else \
// if (filter.d->condition->type() == AbstractCondition::Condition) + \
orComposition->list.append(new \
Condition(*static_cast<Condition*>(filter.d->condition))); + d->condition \
= orComposition; + }
+ }
+}
+
QHash<QString, Filter::Comparison> Filter::conditions(int fieldNumber) const
{
return d->condition ? d->condition->conditions(fieldNumber) : QHash<QString, \
Comparison>();
--- trunk/koffice/kspread/database/Filter.h #690493:690494
@@ -86,6 +86,7 @@
void addCondition(Composition composition,
int fieldNumber, Comparison comparison, const QString& value,
Qt::CaseSensitivity caseSensitivity = Qt::CaseInsensitive, \
Mode mode = Text ); + void addSubFilter(Composition composition, const Filter& \
filter);
QHash<QString, Comparison> conditions(int fieldNumber) const;
void removeConditions(int fieldNumber = -1);
--- trunk/koffice/kspread/database/FilterPopup.cpp #690493:690494
@@ -188,14 +188,10 @@
? Filter::OrComposition : \
Filter::AndComposition;
const QList<QString> values = (comparison == Filter::Match) ? matchList : \
notMatchList;
kDebug() << "adding conditions for fieldNumber " << d->fieldNumber << endl;
- // We have to append the conditions for this field with an and-composition.
- if (!values.isEmpty())
- filter->addCondition(Filter::AndComposition, d->fieldNumber, comparison, \
values[0]);
- for (int i = 1; i < values.count(); ++i)
- {
- // go on with the proper composition
- filter->addCondition(composition, d->fieldNumber, comparison, \
values[i]);
- }
+ Filter subFilter;
+ for (int i = 0; i < values.count(); ++i)
+ subFilter.addCondition(composition, d->fieldNumber, comparison, \
values[i]); + filter->addSubFilter(Filter::AndComposition, subFilter);
}
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic