* move SearchAction and SearchContext to their own files
* term -> searchTerm * add a completion object to SearchContext svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=731848
This commit is contained in:
parent
045ca46537
commit
0a6f2af7f3
@ -35,6 +35,8 @@ set(plasma_LIB_SRCS
|
|||||||
plasma.cpp
|
plasma.cpp
|
||||||
plasma_export.h
|
plasma_export.h
|
||||||
scriptengine.cpp
|
scriptengine.cpp
|
||||||
|
searchaction.cpp
|
||||||
|
searchcontext.cpp
|
||||||
shadowitem.cpp
|
shadowitem.cpp
|
||||||
svg.cpp
|
svg.cpp
|
||||||
theme.cpp
|
theme.cpp
|
||||||
@ -106,6 +108,8 @@ set(plasma_LIB_INCLUDES
|
|||||||
plasma.h
|
plasma.h
|
||||||
plasma_export.h
|
plasma_export.h
|
||||||
scriptengine.h
|
scriptengine.h
|
||||||
|
searchaction.h
|
||||||
|
searchcontext.h
|
||||||
shadowitem_p.h
|
shadowitem_p.h
|
||||||
svg.h
|
svg.h
|
||||||
theme.h
|
theme.h
|
||||||
|
@ -20,61 +20,11 @@
|
|||||||
#include "abstractrunner.h"
|
#include "abstractrunner.h"
|
||||||
|
|
||||||
#include <KDebug>
|
#include <KDebug>
|
||||||
#include <KMimeType>
|
|
||||||
#include <KServiceTypeTrader>
|
#include <KServiceTypeTrader>
|
||||||
#include <KUriFilterData>
|
|
||||||
|
|
||||||
|
|
||||||
namespace Plasma
|
namespace Plasma
|
||||||
{
|
{
|
||||||
|
|
||||||
class SearchContext::Private
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Private()
|
|
||||||
: type(SearchContext::UnknownType)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void resetState()
|
|
||||||
{
|
|
||||||
qDeleteAll(info);
|
|
||||||
info.clear();
|
|
||||||
qDeleteAll(exact);
|
|
||||||
exact.clear();
|
|
||||||
qDeleteAll(possible);
|
|
||||||
possible.clear();
|
|
||||||
type = SearchContext::UnknownType;
|
|
||||||
term.clear();
|
|
||||||
mimetype.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
QList<SearchAction *> info;
|
|
||||||
QList<SearchAction *> exact;
|
|
||||||
QList<SearchAction *> possible;
|
|
||||||
QString term;
|
|
||||||
QString mimetype;
|
|
||||||
SearchContext::Type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
class SearchAction::Private
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Private(SearchContext* s, AbstractRunner *r)
|
|
||||||
: search(s),
|
|
||||||
runner(r),
|
|
||||||
type(SearchAction::ExactMatch),
|
|
||||||
relevance(1)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
SearchContext *search;
|
|
||||||
AbstractRunner *runner;
|
|
||||||
SearchAction::Type type;
|
|
||||||
QString mimetype;
|
|
||||||
qreal relevance;
|
|
||||||
};
|
|
||||||
|
|
||||||
class AbstractRunner::Private
|
class AbstractRunner::Private
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -82,183 +32,6 @@ class AbstractRunner::Private
|
|||||||
bool hasConfig;
|
bool hasConfig;
|
||||||
};
|
};
|
||||||
|
|
||||||
SearchContext::SearchContext(QObject *parent)
|
|
||||||
: QObject(parent),
|
|
||||||
d(new Private)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
SearchContext::~SearchContext()
|
|
||||||
{
|
|
||||||
delete d;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SearchContext::setTerm(const QString &term)
|
|
||||||
{
|
|
||||||
d->resetState();
|
|
||||||
|
|
||||||
if (term.isEmpty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
d->term = term;
|
|
||||||
//FIXME: this is insanely slow =/
|
|
||||||
KUriFilterData filter(term);
|
|
||||||
bool filtered = KUriFilter::self()->filterUri(filter);
|
|
||||||
|
|
||||||
if (filtered) {
|
|
||||||
switch (filter.uriType()) {
|
|
||||||
case KUriFilterData::LocalDir:
|
|
||||||
d->type = Directory;
|
|
||||||
d->mimetype = "inode/folder";
|
|
||||||
break;
|
|
||||||
case KUriFilterData::LocalFile: {
|
|
||||||
d->type = File;
|
|
||||||
KMimeType::Ptr mimetype = KMimeType::findByPath(filter.uri().path());
|
|
||||||
if (mimetype) {
|
|
||||||
d->mimetype = mimetype->name();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case KUriFilterData::NetProtocol:
|
|
||||||
kDebug() << "term is a network protocol?" << term << filter.uriType();
|
|
||||||
d->type = NetworkLocation;
|
|
||||||
break;
|
|
||||||
case KUriFilterData::Executable:
|
|
||||||
d->type = Executable;
|
|
||||||
break;
|
|
||||||
case KUriFilterData::Shell:
|
|
||||||
d->type = ShellCommand;
|
|
||||||
break;
|
|
||||||
case KUriFilterData::Help:
|
|
||||||
d->type = Help;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString SearchContext::term() const
|
|
||||||
{
|
|
||||||
return d->term;
|
|
||||||
}
|
|
||||||
|
|
||||||
SearchContext::Type SearchContext::type() const
|
|
||||||
{
|
|
||||||
return d->type;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString SearchContext::mimetype() const
|
|
||||||
{
|
|
||||||
return d->mimetype;
|
|
||||||
}
|
|
||||||
|
|
||||||
SearchAction* SearchContext::addInformationalMatch(AbstractRunner *runner)
|
|
||||||
{
|
|
||||||
SearchAction *action = new SearchAction(this, runner);
|
|
||||||
action->setType(SearchAction::InformationalMatch);
|
|
||||||
d->info.append(action);
|
|
||||||
return action;
|
|
||||||
}
|
|
||||||
|
|
||||||
SearchAction* SearchContext::addExactMatch(AbstractRunner *runner)
|
|
||||||
{
|
|
||||||
SearchAction *action = new SearchAction(this, runner);
|
|
||||||
action->setType(SearchAction::ExactMatch);
|
|
||||||
d->exact.append(action);
|
|
||||||
return action;
|
|
||||||
}
|
|
||||||
|
|
||||||
SearchAction* SearchContext::addPossibleMatch(AbstractRunner *runner)
|
|
||||||
{
|
|
||||||
SearchAction *action = new SearchAction(this, runner);
|
|
||||||
action->setType(SearchAction::PossibleMatch);
|
|
||||||
d->possible.append(action);
|
|
||||||
return action;
|
|
||||||
}
|
|
||||||
|
|
||||||
QList<SearchAction *> SearchContext::informationalMatches() const
|
|
||||||
{
|
|
||||||
return d->info;
|
|
||||||
}
|
|
||||||
|
|
||||||
QList<SearchAction *> SearchContext::exactMatches() const
|
|
||||||
{
|
|
||||||
return d->exact;
|
|
||||||
}
|
|
||||||
|
|
||||||
QList<SearchAction *> SearchContext::possibleMatches() const
|
|
||||||
{
|
|
||||||
return d->possible;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SearchAction::SearchAction(SearchContext *search, AbstractRunner *runner)
|
|
||||||
: QAction(search),
|
|
||||||
d(new Private(search, runner))
|
|
||||||
{
|
|
||||||
connect(this, SIGNAL(triggered(bool)), this, SLOT(exec()));
|
|
||||||
}
|
|
||||||
|
|
||||||
SearchAction::~SearchAction()
|
|
||||||
{
|
|
||||||
delete d;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SearchAction::setType(Type type)
|
|
||||||
{
|
|
||||||
d->type = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
SearchAction::Type SearchAction::type() const
|
|
||||||
{
|
|
||||||
return d->type;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SearchAction::setMimetype(const QString &mimetype)
|
|
||||||
{
|
|
||||||
d->mimetype = mimetype;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString SearchAction::mimetype() const
|
|
||||||
{
|
|
||||||
return d->mimetype.isEmpty() ? d->search->mimetype() : d->mimetype;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString SearchAction::term() const
|
|
||||||
{
|
|
||||||
return d->search->term();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SearchAction::setRelevance(qreal relevance)
|
|
||||||
{
|
|
||||||
d->relevance = qMax(0.0, qMin(1.0, relevance));
|
|
||||||
}
|
|
||||||
|
|
||||||
qreal SearchAction::relevance() const
|
|
||||||
{
|
|
||||||
return d->relevance;
|
|
||||||
}
|
|
||||||
|
|
||||||
AbstractRunner* SearchAction::runner() const
|
|
||||||
{
|
|
||||||
return d->runner;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SearchAction::operator<(const SearchAction& other) const
|
|
||||||
{
|
|
||||||
return d->relevance < other.d->relevance;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SearchAction::exec()
|
|
||||||
{
|
|
||||||
//TODO: this could be dangerous if the runner is deleted behind our backs.
|
|
||||||
d->runner->exec(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
AbstractRunner::AbstractRunner(QObject* parent)
|
AbstractRunner::AbstractRunner(QObject* parent)
|
||||||
: QObject(parent),
|
: QObject(parent),
|
||||||
d(new Private())
|
d(new Private())
|
||||||
|
117
abstractrunner.h
117
abstractrunner.h
@ -20,128 +20,19 @@
|
|||||||
#ifndef RUNNER_H
|
#ifndef RUNNER_H
|
||||||
#define RUNNER_H
|
#define RUNNER_H
|
||||||
|
|
||||||
#include <QtGui/QAction>
|
|
||||||
#include <QtCore/QList>
|
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
|
|
||||||
#include <plasma/plasma_export.h>
|
#include <plasma/plasma_export.h>
|
||||||
|
#include <plasma/searchaction.h>
|
||||||
|
#include <plasma/searchcontext.h>
|
||||||
|
|
||||||
class KActionCollection;
|
class KCompletion;
|
||||||
class QAction;
|
|
||||||
|
|
||||||
namespace Plasma
|
namespace Plasma
|
||||||
{
|
{
|
||||||
|
|
||||||
class AbstractRunner;
|
|
||||||
class SearchAction;
|
|
||||||
|
|
||||||
class PLASMA_EXPORT SearchContext : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
enum Type { UnknownType = 0,
|
|
||||||
Directory,
|
|
||||||
File,
|
|
||||||
NetworkLocation,
|
|
||||||
Executable,
|
|
||||||
ShellCommand,
|
|
||||||
Help
|
|
||||||
};
|
|
||||||
|
|
||||||
explicit SearchContext(QObject *parent = 0);
|
|
||||||
~SearchContext();
|
|
||||||
|
|
||||||
void setTerm(const QString&);
|
|
||||||
QString term() const;
|
|
||||||
Type type() const;
|
|
||||||
QString mimetype() const;
|
|
||||||
|
|
||||||
SearchAction* addInformationalMatch(AbstractRunner *runner);
|
|
||||||
SearchAction* addExactMatch(AbstractRunner *runner);
|
|
||||||
SearchAction* addPossibleMatch(AbstractRunner *runner);
|
|
||||||
|
|
||||||
QList<SearchAction *> informationalMatches() const;
|
|
||||||
QList<SearchAction *> exactMatches() const;
|
|
||||||
QList<SearchAction *> possibleMatches() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
class Private;
|
|
||||||
Private * const d;
|
|
||||||
};
|
|
||||||
|
|
||||||
class PLASMA_EXPORT SearchAction : public QAction
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
enum Type { InformationalMatch,
|
|
||||||
ExactMatch,
|
|
||||||
PossibleMatch };
|
|
||||||
|
|
||||||
SearchAction(SearchContext *search, AbstractRunner *runner);
|
|
||||||
~SearchAction();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the type of match this action represents.
|
|
||||||
*/
|
|
||||||
void setType(Type type);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The type of action this is. Defaults to ExactMatch.
|
|
||||||
*/
|
|
||||||
Type type() const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the mimetype, if any, associated with this match
|
|
||||||
*
|
|
||||||
* @arg mimetype the mimetype
|
|
||||||
*/
|
|
||||||
void setMimetype(const QString &mimetype);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The mimetype associated with this action, if any
|
|
||||||
*/
|
|
||||||
QString mimetype() const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The search term that triggered this action
|
|
||||||
*/
|
|
||||||
QString term() const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the relevance of this action for the search
|
|
||||||
* it was created for.
|
|
||||||
*
|
|
||||||
* @param relevance a number between 0 and 1.
|
|
||||||
*/
|
|
||||||
void setRelevance(qreal relevance);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The relevance of this action to the search. By default,
|
|
||||||
* the relevance is 1.
|
|
||||||
*
|
|
||||||
* @return a number between 0 and 1
|
|
||||||
*/
|
|
||||||
qreal relevance() const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The runner associated with this action
|
|
||||||
*/
|
|
||||||
AbstractRunner* runner() const;
|
|
||||||
|
|
||||||
bool operator<(const SearchAction& other) const;
|
|
||||||
|
|
||||||
protected Q_SLOTS:
|
|
||||||
void exec();
|
|
||||||
|
|
||||||
private:
|
|
||||||
class Private;
|
|
||||||
Private * const d;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A abstract super-class for Plasma Runners
|
* An abstract base class for Plasma Runner plugins
|
||||||
*/
|
*/
|
||||||
class PLASMA_EXPORT AbstractRunner : public QObject
|
class PLASMA_EXPORT AbstractRunner : public QObject
|
||||||
{
|
{
|
||||||
|
111
searchaction.cpp
Normal file
111
searchaction.cpp
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2006-2007 Aaron Seigo <aseigo@kde.org>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Library General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this program; if not, write to the
|
||||||
|
* Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "searchaction.h"
|
||||||
|
|
||||||
|
#include "abstractrunner.h"
|
||||||
|
|
||||||
|
namespace Plasma
|
||||||
|
{
|
||||||
|
|
||||||
|
class SearchAction::Private
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Private(SearchContext* s, AbstractRunner *r)
|
||||||
|
: search(s),
|
||||||
|
runner(r),
|
||||||
|
type(SearchAction::ExactMatch),
|
||||||
|
relevance(1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchContext *search;
|
||||||
|
AbstractRunner *runner;
|
||||||
|
SearchAction::Type type;
|
||||||
|
QString mimetype;
|
||||||
|
qreal relevance;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
SearchAction::SearchAction(SearchContext *search, AbstractRunner *runner)
|
||||||
|
: QAction(search),
|
||||||
|
d(new Private(search, runner))
|
||||||
|
{
|
||||||
|
connect(this, SIGNAL(triggered(bool)), this, SLOT(exec()));
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchAction::~SearchAction()
|
||||||
|
{
|
||||||
|
delete d;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchAction::setType(Type type)
|
||||||
|
{
|
||||||
|
d->type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchAction::Type SearchAction::type() const
|
||||||
|
{
|
||||||
|
return d->type;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchAction::setMimetype(const QString &mimetype)
|
||||||
|
{
|
||||||
|
d->mimetype = mimetype;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString SearchAction::mimetype() const
|
||||||
|
{
|
||||||
|
return d->mimetype.isEmpty() ? d->search->mimetype() : d->mimetype;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString SearchAction::searchTerm() const
|
||||||
|
{
|
||||||
|
return d->search->searchTerm();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchAction::setRelevance(qreal relevance)
|
||||||
|
{
|
||||||
|
d->relevance = qMax(0.0, qMin(1.0, relevance));
|
||||||
|
}
|
||||||
|
|
||||||
|
qreal SearchAction::relevance() const
|
||||||
|
{
|
||||||
|
return d->relevance;
|
||||||
|
}
|
||||||
|
|
||||||
|
AbstractRunner* SearchAction::runner() const
|
||||||
|
{
|
||||||
|
return d->runner;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SearchAction::operator<(const SearchAction& other) const
|
||||||
|
{
|
||||||
|
return d->relevance < other.d->relevance;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchAction::exec()
|
||||||
|
{
|
||||||
|
//TODO: this could be dangerous if the runner is deleted behind our backs.
|
||||||
|
d->runner->exec(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "searchaction.moc"
|
105
searchaction.h
Normal file
105
searchaction.h
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2006-2007 Aaron Seigo <aseigo@kde.org>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Library General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this program; if not, write to the
|
||||||
|
* Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SEARCHACTION_H
|
||||||
|
#define SEARCHACTION_H
|
||||||
|
|
||||||
|
#include <QtGui/QAction>
|
||||||
|
|
||||||
|
#include <plasma/plasma_export.h>
|
||||||
|
|
||||||
|
namespace Plasma
|
||||||
|
{
|
||||||
|
|
||||||
|
class SearchContext;
|
||||||
|
class AbstractRunner;
|
||||||
|
|
||||||
|
class PLASMA_EXPORT SearchAction : public QAction
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum Type { InformationalMatch,
|
||||||
|
ExactMatch,
|
||||||
|
PossibleMatch };
|
||||||
|
|
||||||
|
SearchAction(SearchContext *search, AbstractRunner *runner);
|
||||||
|
~SearchAction();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the type of match this action represents.
|
||||||
|
*/
|
||||||
|
void setType(Type type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type of action this is. Defaults to ExactMatch.
|
||||||
|
*/
|
||||||
|
Type type() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the mimetype, if any, associated with this match
|
||||||
|
*
|
||||||
|
* @arg mimetype the mimetype
|
||||||
|
*/
|
||||||
|
void setMimetype(const QString &mimetype);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The mimetype associated with this action, if any
|
||||||
|
*/
|
||||||
|
QString mimetype() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The search term that triggered this action
|
||||||
|
*/
|
||||||
|
QString searchTerm() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the relevance of this action for the search
|
||||||
|
* it was created for.
|
||||||
|
*
|
||||||
|
* @param relevance a number between 0 and 1.
|
||||||
|
*/
|
||||||
|
void setRelevance(qreal relevance);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The relevance of this action to the search. By default,
|
||||||
|
* the relevance is 1.
|
||||||
|
*
|
||||||
|
* @return a number between 0 and 1
|
||||||
|
*/
|
||||||
|
qreal relevance() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The runner associated with this action
|
||||||
|
*/
|
||||||
|
AbstractRunner* runner() const;
|
||||||
|
|
||||||
|
bool operator<(const SearchAction& other) const;
|
||||||
|
|
||||||
|
protected Q_SLOTS:
|
||||||
|
void exec();
|
||||||
|
|
||||||
|
private:
|
||||||
|
class Private;
|
||||||
|
Private * const d;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
220
searchcontext.cpp
Normal file
220
searchcontext.cpp
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2006-2007 Aaron Seigo <aseigo@kde.org>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Library General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this program; if not, write to the
|
||||||
|
* Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "searchcontext.h"
|
||||||
|
|
||||||
|
#include <KCompletion>
|
||||||
|
#include <KDebug>
|
||||||
|
#include <KMimeType>
|
||||||
|
#include <KUriFilterData>
|
||||||
|
|
||||||
|
#include "searchaction.h"
|
||||||
|
|
||||||
|
namespace Plasma
|
||||||
|
{
|
||||||
|
|
||||||
|
class SearchContext::Private
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Private()
|
||||||
|
: type(SearchContext::UnknownType),
|
||||||
|
completer(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
~Private()
|
||||||
|
{
|
||||||
|
delete completer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void resetState()
|
||||||
|
{
|
||||||
|
qDeleteAll(info);
|
||||||
|
info.clear();
|
||||||
|
qDeleteAll(exact);
|
||||||
|
exact.clear();
|
||||||
|
qDeleteAll(possible);
|
||||||
|
possible.clear();
|
||||||
|
type = SearchContext::UnknownType;
|
||||||
|
term.clear();
|
||||||
|
mimetype.clear();
|
||||||
|
|
||||||
|
if (completer) {
|
||||||
|
completer->clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
KCompletion* completionObject()
|
||||||
|
{
|
||||||
|
if (!completer) {
|
||||||
|
completer = new KCompletion;
|
||||||
|
}
|
||||||
|
|
||||||
|
return completer;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<SearchAction *> info;
|
||||||
|
QList<SearchAction *> exact;
|
||||||
|
QList<SearchAction *> possible;
|
||||||
|
QString term;
|
||||||
|
QString mimetype;
|
||||||
|
SearchContext::Type type;
|
||||||
|
KCompletion *completer;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
SearchContext::SearchContext(QObject *parent)
|
||||||
|
: QObject(parent),
|
||||||
|
d(new Private)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchContext::~SearchContext()
|
||||||
|
{
|
||||||
|
delete d;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchContext::setSearchTerm(const QString &term)
|
||||||
|
{
|
||||||
|
d->resetState();
|
||||||
|
|
||||||
|
if (term.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
d->term = term;
|
||||||
|
//FIXME: this is insanely slow =/
|
||||||
|
KUriFilterData filter(term);
|
||||||
|
bool filtered = KUriFilter::self()->filterUri(filter);
|
||||||
|
|
||||||
|
if (filtered) {
|
||||||
|
switch (filter.uriType()) {
|
||||||
|
case KUriFilterData::LocalDir:
|
||||||
|
d->type = Directory;
|
||||||
|
d->mimetype = "inode/folder";
|
||||||
|
break;
|
||||||
|
case KUriFilterData::LocalFile: {
|
||||||
|
d->type = File;
|
||||||
|
KMimeType::Ptr mimetype = KMimeType::findByPath(filter.uri().path());
|
||||||
|
if (mimetype) {
|
||||||
|
d->mimetype = mimetype->name();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case KUriFilterData::NetProtocol:
|
||||||
|
//kDebug() << "term is a network protocol?" << term << filter.uriType();
|
||||||
|
d->type = NetworkLocation;
|
||||||
|
break;
|
||||||
|
case KUriFilterData::Executable:
|
||||||
|
d->type = Executable;
|
||||||
|
break;
|
||||||
|
case KUriFilterData::Shell:
|
||||||
|
d->type = ShellCommand;
|
||||||
|
break;
|
||||||
|
case KUriFilterData::Help:
|
||||||
|
d->type = Help;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString SearchContext::searchTerm() const
|
||||||
|
{
|
||||||
|
return d->term;
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchContext::Type SearchContext::type() const
|
||||||
|
{
|
||||||
|
return d->type;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString SearchContext::mimetype() const
|
||||||
|
{
|
||||||
|
return d->mimetype;
|
||||||
|
}
|
||||||
|
|
||||||
|
KCompletion* SearchContext::completionObject() const
|
||||||
|
{
|
||||||
|
return d->completionObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchContext::addStringCompletion(const QString &completion)
|
||||||
|
{
|
||||||
|
if (!d->completer) {
|
||||||
|
// if the completion object isn't actually used, don't bother
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
d->completer->addItem(completion);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchContext::addStringCompletions(const QStringList &completion)
|
||||||
|
{
|
||||||
|
if (!d->completer) {
|
||||||
|
// if the completion object isn't actually used, don't bother
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
d->completer->insertItems(completion);
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchAction* SearchContext::addInformationalMatch(AbstractRunner *runner)
|
||||||
|
{
|
||||||
|
SearchAction *action = new SearchAction(this, runner);
|
||||||
|
action->setType(SearchAction::InformationalMatch);
|
||||||
|
d->info.append(action);
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchAction* SearchContext::addExactMatch(AbstractRunner *runner)
|
||||||
|
{
|
||||||
|
SearchAction *action = new SearchAction(this, runner);
|
||||||
|
action->setType(SearchAction::ExactMatch);
|
||||||
|
d->exact.append(action);
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchAction* SearchContext::addPossibleMatch(AbstractRunner *runner)
|
||||||
|
{
|
||||||
|
SearchAction *action = new SearchAction(this, runner);
|
||||||
|
action->setType(SearchAction::PossibleMatch);
|
||||||
|
d->possible.append(action);
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<SearchAction *> SearchContext::informationalMatches() const
|
||||||
|
{
|
||||||
|
return d->info;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<SearchAction *> SearchContext::exactMatches() const
|
||||||
|
{
|
||||||
|
return d->exact;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<SearchAction *> SearchContext::possibleMatches() const
|
||||||
|
{
|
||||||
|
return d->possible;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "searchcontext.moc"
|
144
searchcontext.h
Normal file
144
searchcontext.h
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2006-2007 Aaron Seigo <aseigo@kde.org>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Library General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this program; if not, write to the
|
||||||
|
* Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SEARCHCONTEXT_H
|
||||||
|
#define SEARCHCONTEXT_H
|
||||||
|
|
||||||
|
#include <QtCore/QList>
|
||||||
|
#include <QtCore/QObject>
|
||||||
|
|
||||||
|
#include <plasma/plasma_export.h>
|
||||||
|
|
||||||
|
class KCompletion;
|
||||||
|
|
||||||
|
namespace Plasma
|
||||||
|
{
|
||||||
|
|
||||||
|
class SearchAction;
|
||||||
|
class AbstractRunner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @short The SearchContext class provides information related to a search,
|
||||||
|
* including the search term, metadata on the search term and collected
|
||||||
|
* matches.
|
||||||
|
*/
|
||||||
|
class PLASMA_EXPORT SearchContext : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum Type { UnknownType = 0,
|
||||||
|
Directory,
|
||||||
|
File,
|
||||||
|
NetworkLocation,
|
||||||
|
Executable,
|
||||||
|
ShellCommand,
|
||||||
|
Help
|
||||||
|
};
|
||||||
|
|
||||||
|
explicit SearchContext(QObject *parent = 0);
|
||||||
|
~SearchContext();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the search term for this object. This clears all current
|
||||||
|
* matches in the process.
|
||||||
|
*/
|
||||||
|
void setSearchTerm(const QString&);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the current search term.
|
||||||
|
*/
|
||||||
|
QString searchTerm() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type of item the search term might refer to.
|
||||||
|
* @see Type
|
||||||
|
*/
|
||||||
|
Type type() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The mimetype that the search term refers to, if discoverable.
|
||||||
|
*
|
||||||
|
* @return QString() if the mimetype can not be determined, otherwise
|
||||||
|
* the mimetype of the object being refered to by the search
|
||||||
|
* string.
|
||||||
|
*/
|
||||||
|
QString mimetype() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a completion object that can be used with UI elements
|
||||||
|
*/
|
||||||
|
KCompletion* completionObject() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds an item to the completion object.
|
||||||
|
*/
|
||||||
|
void addStringCompletion(const QString& completion);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds multiple items to the completion object.
|
||||||
|
*/
|
||||||
|
void addStringCompletions(const QStringList& completions);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an action that represents a match to the current search term.
|
||||||
|
* This action is informational in nature and does not represent and actionable
|
||||||
|
* match.
|
||||||
|
*
|
||||||
|
* If string data is added to the action using QAction::setData(), that
|
||||||
|
* string may be used in user interfaces when the item is selected.
|
||||||
|
*/
|
||||||
|
SearchAction* addInformationalMatch(AbstractRunner *runner);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an action that represents an exact match to the current search term.
|
||||||
|
*/
|
||||||
|
SearchAction* addExactMatch(AbstractRunner *runner);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an action that represents a possible match to the current search term.
|
||||||
|
*/
|
||||||
|
SearchAction* addPossibleMatch(AbstractRunner *runner);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves all available informational matches for the current
|
||||||
|
* search term.
|
||||||
|
*/
|
||||||
|
QList<SearchAction *> informationalMatches() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves all available exact matches for the current
|
||||||
|
* search term.
|
||||||
|
*/
|
||||||
|
QList<SearchAction *> exactMatches() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves all available possible matches for the current
|
||||||
|
* search term.
|
||||||
|
*/
|
||||||
|
QList<SearchAction *> possibleMatches() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
class Private;
|
||||||
|
Private * const d;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user