24 #include <QReadWriteLock>
25 #include <QSharedData>
26 #include <QStringList>
28 #include <QWeakPointer>
37 class QueryMatchPrivate :
public QSharedData
40 QueryMatchPrivate(AbstractRunner *r)
42 lock(new QReadWriteLock(QReadWriteLock::Recursive)),
44 type(QueryMatch::ExactMatch),
52 QueryMatchPrivate(
const QueryMatchPrivate &other)
54 lock(new QReadWriteLock(QReadWriteLock::Recursive))
56 QReadLocker lock(other.lock);
57 runner = other.runner;
59 relevance = other.relevance;
60 selAction = other.selAction;
61 enabled = other.enabled;
62 idSetByData = other.idSetByData;
65 subtext = other.subtext;
76 QWeakPointer<AbstractRunner> runner;
90 : d(new QueryMatchPrivate(runner))
106 return d->runner != 0;
111 if (d->id.isEmpty() && d->runner) {
112 return d->runner.data()->id();
130 d->relevance = qMax(qreal(0.0), relevance);
140 return d->runner.data();
145 QWriteLocker locker(d->lock);
151 QWriteLocker locker(d->lock);
157 QWriteLocker locker(d->lock);
160 if (d->id.isEmpty() || d->idSetByData) {
161 const QString
id = data.toString();
163 setId(data.toString());
164 d->idSetByData =
true;
171 QWriteLocker locker(d->lock);
173 d->id = d->runner.data()->id();
177 d->id.append(
'_').append(
id);
180 d->idSetByData =
false;
185 QWriteLocker locker(d->lock);
191 QReadLocker locker(d->lock);
197 QReadLocker locker(d->lock);
203 QReadLocker locker(d->lock);
209 QReadLocker locker(d->lock);
215 d->enabled = enabled;
220 return d->enabled && d->runner;
230 d->selAction = action;
235 if (d->type == other.d->type) {
240 if (d->relevance != other.d->relevance) {
241 return d->relevance < other.d->relevance;
244 QReadLocker locker(d->lock);
245 QReadLocker otherLocker(other.d->lock);
248 return d->text > other.d->text;
251 return d->type < other.d->type;
265 return (d == other.d);
270 return (d != other.d);
277 d->runner.data()->run(context, *
this);
283 return d->runner && d->runner.data()->hasRunOptions();
289 d->runner.data()->createRunOptions(parent);