<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>engine/kickoff/searchmodel.cpp</filename>
    </added>
    <added>
      <filename>engine/kickoff/searchmodel.h</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -32,6 +32,7 @@ set(raptor_SRCS
     engine/kickoff/kickoffabstractmodel.cpp
     engine/kickoff/models.cpp
     engine/kickoff/leavemodel.cpp
+    engine/kickoff/searchmodel.cpp
 )
  
 # Now make sure all files get to the right place</diff>
      <filename>CMakeLists.txt</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-/*  
+/*
     Copyright 2007 Robert Knight &lt;robertknight@gmail.com&gt;
 
     This library is free software; you can redistribute it and/or
@@ -18,67 +18,21 @@
 */
 
 // Own
-#include &quot;core/searchmodel.h&quot;
+#include &quot;searchmodel.h&quot;
 
-#include &quot;config-kickoff-applets.h&quot; 
 // Qt
 
 // KDE
 #include &lt;KDebug&gt;
 #include &lt;KMimeType&gt;
 #include &lt;KServiceTypeTrader&gt;
-#ifdef HAVE_STRIGIDBUS
-#include &lt;strigi/qtdbus/strigiclient.h&gt;
-#endif
-#include &lt;solid/networking.h&gt;
-
-// Local
-#include &quot;core/models.h&quot;
 
 using namespace Kickoff;
 
-class SearchModel::Private
-{
-public:
-    Private(SearchModel *parent) : q(parent) {}
-
-    void addItemForIface(SearchInterface *iface,QStandardItem *item)
-    {
-        int index = searchIfaces.indexOf(iface);
-        Q_ASSERT(index &gt;= 0);
-        q-&gt;item(index)-&gt;appendRow(item);
-    }
-    void clear()
-    {
-        for (int i=0;i&lt;q-&gt;rowCount();i++) {
-            q-&gt;item(i)-&gt;removeRows(0,q-&gt;item(i)-&gt;rowCount());
-        }
-    }
-
-    SearchModel * const q;
-    QList&lt;SearchInterface*&gt; searchIfaces;
-};
-
-SearchModel::SearchModel(QObject *parent)
-    : KickoffModel(parent)
-    , d(new Private(this))
+SearchModel::SearchModel()
+    : ApplicationModel()
 {
-    d-&gt;searchIfaces &lt;&lt; new ApplicationSearch(this);
-    //d-&gt;searchIfaces &lt;&lt; new IndexerSearch(this);
-    d-&gt;searchIfaces &lt;&lt; new WebSearch(this);
 
-    foreach(SearchInterface *iface,d-&gt;searchIfaces) {
-        QStandardItem *ifaceItem = new QStandardItem(iface-&gt;name());
-        appendRow(ifaceItem);
-        connect(iface,SIGNAL(resultsAvailable(QStringList)),
-                this,SLOT(resultsAvailable(QStringList)));
-        connect(iface,SIGNAL(resultsAvailable(ResultList)),
-                this,SLOT(resultsAvailable(ResultList)));
-        connect(iface,SIGNAL(resultsAvailable(QStringList)),
-                this,SIGNAL(resultsAvailable()));
-        connect(iface,SIGNAL(resultsAvailable(ResultList)),
-                this,SIGNAL(resultsAvailable()));
-    }
 }
 SearchModel::~SearchModel()
 {
@@ -87,7 +41,7 @@ SearchModel::~SearchModel()
 void SearchModel::resultsAvailable(const QStringList&amp; results)
 {
     SearchInterface *iface = qobject_cast&lt;SearchInterface*&gt;(sender());
-    
+
     Q_ASSERT(iface);
 
     foreach(const QString&amp; result,results) {
@@ -96,146 +50,5 @@ void SearchModel::resultsAvailable(const QStringList&amp; results)
         d-&gt;addItemForIface(iface,resultItem);
     }
 }
-void SearchModel::resultsAvailable(const ResultList&amp; results)
-{
-    SearchInterface *iface = qobject_cast&lt;SearchInterface*&gt;(sender());
-
-    Q_ASSERT(iface);
-
-    foreach(const SearchResult&amp; result,results) {
-        QStandardItem *item = StandardItemFactory::createItemForUrl(result.url);
-        item-&gt;setData(result.title,Qt::DisplayRole);
-        item-&gt;setData(result.subTitle,SubTitleRole);
-        d-&gt;addItemForIface(iface,item);
-    }
-}
-void SearchModel::setQuery(const QString&amp; query)
-{
-    d-&gt;clear();
-
-    if (query.isEmpty()) {
-        return; 
-    }
-
-    foreach(SearchInterface *iface, d-&gt;searchIfaces) {
-        iface-&gt;setQuery(query);
-    }
-}
-
-SearchInterface::SearchInterface(QObject *parent)
-    : QObject(parent)
-{
-}
-
-ApplicationSearch::ApplicationSearch(QObject *parent)
-    : SearchInterface(parent)
-{
-}
-
-QString ApplicationSearch::name() const
-{
-    return i18n(&quot;Applications&quot;);
-}
-
-void ApplicationSearch::setQuery(const QString&amp; query)
-{
-    //QString mimeName = mimeNameForQuery(query);
-    QString traderQuery = QString(&quot;((exist GenericName) and ('%1' ~~ GenericName)) or ('%1' ~~ Name) or ('%1' ~~ Exec) or ((exist Keywords) and ('%1' ~in Keywords))&quot;
-                                  //&quot; or ('%2' in MimeType)&quot;
-                                 )
-                            .arg(query); //.arg(mimeName);
-    KServiceTypeTrader *trader = KServiceTypeTrader::self();
-    KService::List results = trader-&gt;query(&quot;Application&quot;,traderQuery);
-
-    // If we have KDE 3 and KDE 4 versions of a service, return only the 
-    // KDE 4 version
-    QHash&lt;QString,int&gt; desktopNames;
-    QSet&lt;QString&gt; execFields;
-
-
-    for (int i=0;i&lt;results.count();i++) {
-        KService::Ptr service = results[i];
-        int existingPos = desktopNames.value(service-&gt;name(),-1);
-        KService::Ptr existing = existingPos &lt; 0 ? KService::Ptr(0) : results[existingPos]; 
-
-       
-        if (!existing.isNull()) {
-            if (isLaterVersion(existing,service)) {
-                results[i] = 0; 
-            } else if (isLaterVersion(service,existing)) {
-                results[existingPos] = 0;
-            } else {
-                // do not show more than one entry which does the same thing when run
-                // (ie. ignore entries that have an identical 'Exec' field to an existing
-                // entry)
-                if (execFields.contains(service-&gt;exec()) &amp;&amp; service-&gt;noDisplay()) {
-                    results[i] = 0;
-                }
-            }
-        } else {
-            desktopNames.insert(service-&gt;name(),i);
-            execFields.insert(service-&gt;exec());
-        }
-    }
-
-
-    QStringList pathResults;
-    foreach(const KService::Ptr &amp;service,results) {
-        if (!service.isNull() &amp;&amp; !service-&gt;noDisplay())  {
-            pathResults &lt;&lt; service-&gt;entryPath();
-        }
-    }
-    emit resultsAvailable(pathResults);
-}
-
-QString ApplicationSearch::mimeNameForQuery(const QString&amp; query) const
-{
-    KMimeType::Ptr type = KMimeType::findByPath('.'+query,0,true);
-    if (type) {
-        kDebug() &lt;&lt; &quot;Mime type name&quot; &lt;&lt; type-&gt;name();
-        return type-&gt;name();
-    }
-    return QString();
-}
-WebSearch::WebSearch(QObject *parent)
-    : SearchInterface(parent)
-{
-}
-QString WebSearch::name() const
-{
-    return i18n(&quot;Web Searches&quot;);
-}
-void WebSearch::setQuery(const QString&amp; query)
-{
-    ResultList results;
-    SearchResult googleResult;
-    googleResult.url = QString(&quot;http://www.google.com/search?q=%1&quot;).arg(query);
-    googleResult.title = i18n(&quot;Search web for '%1'&quot;,query);
-    results &lt;&lt; googleResult; 
-    emit resultsAvailable(results);
-}
-IndexerSearch::IndexerSearch(QObject *parent)
-    : SearchInterface(parent)
-{
-}
-QString IndexerSearch::name() const
-{
-    return i18n(&quot;Documents&quot;);
-}
-void IndexerSearch::setQuery(const QString&amp; query)
-{
-#ifdef HAVE_STRIGIDBUS 
-    static const StrigiClient searchClient;
-
-    QList&lt;QString&gt; urls;
-    QList&lt;StrigiHit&gt; hits = searchClient.getHits(query,10,0);
-    foreach(const StrigiHit&amp; hit,hits) {
-        if (!hit.uri.isEmpty()) {
-            urls &lt;&lt; hit.uri;
-        }
-    }
-    emit resultsAvailable(urls);
-#endif
-}
 
 #include &quot;searchmodel.moc&quot;</diff>
      <filename>kickoff/core/searchmodel.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -15,6 +15,7 @@
 #include &quot;view/raptoritemdelegate.h&quot;
 #include &quot;view/raptorscrollbutton.h&quot;
 #include &quot;engine/kickoff/applicationmodel.h&quot;
+#include &quot;engine/kickoff/searchmodel.h&quot;
 #include &quot;view/raptorbreadcrumb.h&quot;
 
 // Qt
@@ -32,6 +33,7 @@
 // Plasma
 #include &lt;Plasma/Theme&gt;
 #include &lt;Plasma/LineEdit&gt;
+#include &lt;plasma/runnermanager.h&gt;
 
 class RaptorGraphicsWidget::Private
 {
@@ -48,12 +50,14 @@ public:
     RaptorItemsView *view;
     QGraphicsProxyWidget *proxy;
     Kickoff::ApplicationModel *model;
+    Kickoff::SearchModel * searchModel;
     RaptorScrollButton *rightScrollButton;
     QGraphicsProxyWidget *rightScrollButtonProxy;
     RaptorScrollButton *leftScrollButton;
     QGraphicsProxyWidget *leftScrollButtonProxy;
     Plasma::LineEdit *searchLine;
     RaptorBreadCrumb * breadCrumb;
+    Plasma::RunnerManager * manager;
 };
 
 RaptorGraphicsWidget::RaptorGraphicsWidget(QGraphicsItem *parent) : QGraphicsWidget(parent),
@@ -63,6 +67,7 @@ RaptorGraphicsWidget::RaptorGraphicsWidget(QGraphicsItem *parent) : QGraphicsWid
     d-&gt;view = new RaptorItemsView();
     RaptorItemDelegate *delegate = new RaptorItemDelegate();
     d-&gt;model = new Kickoff::ApplicationModel();
+    d-&gt;searchModel = new Kickoff::SearchModel();
     d-&gt;breadCrumb = new RaptorBreadCrumb(d-&gt;view, d-&gt;model, this);
     d-&gt;searchLine = new Plasma::LineEdit(this);
     d-&gt;rightScrollButton = new RaptorScrollButton(RaptorScrollButton::Right);
@@ -100,6 +105,9 @@ RaptorGraphicsWidget::RaptorGraphicsWidget(QGraphicsItem *parent) : QGraphicsWid
     d-&gt;proxy = new QGraphicsProxyWidget(this);
     d-&gt;proxy-&gt;setWidget(d-&gt;view);
 
+    d-&gt;manager = new Plasma::RunnerManager(this);
+    d-&gt;manager-&gt;reloadConfiguration();
+
     layout-&gt;addItem(d-&gt;proxy);
 
     connect(d-&gt;rightScrollButton, SIGNAL(clicked()), SLOT(scrollRight()));
@@ -111,6 +119,9 @@ RaptorGraphicsWidget::RaptorGraphicsWidget(QGraphicsItem *parent) : QGraphicsWid
 
     connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()), this, SLOT(updateColors()));
     connect(d-&gt;view, SIGNAL(applicationClicked(const KUrl &amp;)), this, SLOT(launchApplication(const KUrl &amp;)));
+    connect(d-&gt;searchLine, SIGNAL(textEdited(const QString&amp;)), this, SLOT(refineModel()));
+    connect(d-&gt;manager, SIGNAL(matchesChanged(const QList&lt;Plasma::QueryMatch&gt;&amp;)), this,
+            SLOT(matchesChanged(const QList&lt;Plasma::QueryMatch&gt;&amp;)));
 
     d-&gt;view-&gt;focusCentralItem();
 }
@@ -149,7 +160,7 @@ void RaptorGraphicsWidget::scrollRight()
     int nextRow = selected.row()+1;
     if(nextRow&gt;rowCount-1)
         nextRow = 0;
-	
+
     QModelIndex rightOne = d-&gt;model-&gt;index(nextRow, 0);
     d-&gt;view-&gt;setCurrentIndex(rightOne);
     d-&gt;view-&gt;update();
@@ -163,12 +174,12 @@ void RaptorGraphicsWidget::updateColors()
 // QSizeF RaptorGraphicsWidget::sizeHint(Qt::SizeHint which, const QSizeF &amp; constraint ) const
 // {
 //     QSizeF size;
-// 
+//
 //     kDebug()&lt;&lt;&quot;minimum&quot;&lt;&lt;d-&gt;view-&gt;minimumSize();
 //     kDebug()&lt;&lt;&quot;hint&quot;&lt;&lt;d-&gt;view-&gt;sizeHint();
 //     kDebug()&lt;&lt;&quot;maximum&quot;&lt;&lt;d-&gt;view-&gt;maximumSize();
 //     kDebug()&lt;&lt;&quot;current&quot;&lt;&lt;this-&gt;size().toSize();
-// 
+//
 //     switch (which) {
 //     case Qt::MinimumSize :
 //         size = QSizeF(200,100);
@@ -181,7 +192,7 @@ void RaptorGraphicsWidget::updateColors()
 //         size = QSizeF(d-&gt;view-&gt;maximumSize());
 //         break;
 //     }
-// 
+//
 //     return size;
 // }
 
@@ -194,3 +205,25 @@ void RaptorGraphicsWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
 
     QGraphicsWidget::resizeEvent(event);
 }
+
+void RaptorGraphicsWidget::refineModel()
+{
+    if ( d-&gt;searchLine-&gt;text().isEmpty() )
+    {
+        d-&gt;manager-&gt;reset();
+        d-&gt;view-&gt;setModel(d-&gt;model);
+        return;
+    }
+
+    d-&gt;manager-&gt;launchQuery(d-&gt;searchLine-&gt;text());
+}
+
+void RaptorGraphicsWidget::matchesChanged(const QList&lt;Plasma::QueryMatch&gt; &amp;matches)
+{
+    foreach (const Plasma::QueryMatch &amp;ent, matches)
+    {
+
+    }
+}
+
+#include &quot;raptorgraphicswidget.moc&quot;</diff>
      <filename>view/raptorgraphicswidget.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -12,6 +12,7 @@
 #define RAPTORGRAPHICSWIDGET_H
 
 #include &lt;QGraphicsWidget&gt;
+#include &lt;plasma/querymatch.h&gt;
 
 class KUrl;
 
@@ -31,6 +32,8 @@ class RaptorGraphicsWidget : public QGraphicsWidget
         void launchApplication(const KUrl &amp;);
         void scrollLeft();
         void scrollRight();
+        void refineModel();
+        void matchesChanged(const QList&lt;Plasma::QueryMatch&gt;&amp;);
 
     private:
         class Private;</diff>
      <filename>view/raptorgraphicswidget.h</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>ed67b761f87ffe0492e0fa0c2fbf4ef4d0cca6f6</id>
    </parent>
  </parents>
  <author>
    <name>Dario Freddi</name>
    <email>drf54321@gmail.com</email>
  </author>
  <url>http://github.com/ruphy/raptor/commit/d5a9572211d299ee8eafbc64da59963d65e6cc3e</url>
  <id>d5a9572211d299ee8eafbc64da59963d65e6cc3e</id>
  <committed-date>2008-09-24T08:16:35-07:00</committed-date>
  <authored-date>2008-09-24T08:16:35-07:00</authored-date>
  <message>added runner interface, stub of the model used to search

Signed-off-by: Dario Freddi &lt;drf54321@gmail.com&gt;</message>
  <tree>0378d108bdc702f454ddb22f5bdda1980c52cdbc</tree>
  <committer>
    <name>Dario Freddi</name>
    <email>drf54321@gmail.com</email>
  </committer>
</commit>
