From fb871ac2b4c5d20489c8d77022269b99634b5778 Mon Sep 17 00:00:00 2001 From: megabigbug Date: Fri, 23 Apr 2010 08:25:45 +0200 Subject: refractoring on search engines --- src/urlbar/completionwidget.cpp | 36 +--------------- src/urlbar/completionwidget.h | 9 ++-- src/urlbar/listitem.cpp | 95 ++++++++++++++++------------------------- src/urlbar/listitem.h | 14 +++--- src/urlbar/urlresolver.cpp | 10 +---- 5 files changed, 49 insertions(+), 115 deletions(-) (limited to 'src/urlbar') diff --git a/src/urlbar/completionwidget.cpp b/src/urlbar/completionwidget.cpp index 8307940b..e0027a92 100644 --- a/src/urlbar/completionwidget.cpp +++ b/src/urlbar/completionwidget.cpp @@ -34,6 +34,7 @@ // Local Includes #include "application.h" #include "urlresolver.h" +#include "searchengine.h" // KDE Includes #include @@ -48,15 +49,12 @@ #include #include -// Defines -#define QL1S(x) QLatin1String(x) - CompletionWidget::CompletionWidget(QWidget *parent) : QFrame(parent, Qt::ToolTip) , _parent(parent) , _currentIndex(-1) - , _searchEngine( defaultSearchEngine() ) + , _searchEngine( SearchEngine::defaultEngine() ) { setFrameStyle(QFrame::Panel); setLayoutDirection(Qt::LeftToRight); @@ -259,8 +257,6 @@ void CompletionWidget::itemChosen(ListItem *item, Qt::MouseButton button) } - - void CompletionWidget::suggestUrls(const QString &text) { QWidget *w = qobject_cast(parent()); @@ -284,31 +280,3 @@ void CompletionWidget::suggestUrls(const QString &text) } -QString CompletionWidget::defaultSearchEngine() -{ - int n = ReKonfig::searchEngine(); - QString engine; - switch(n) - { - case 0: - engine = QL1S("google"); - break; - case 1: - engine = QL1S("altavista"); - break; - case 2: - engine = QL1S("lycos"); - break; - case 3: - engine = QL1S("wikipedia"); - break; - case 4: - engine = QL1S("wolfram"); - break; - default: - engine = QL1S("google"); - break; - } - - return engine; -} diff --git a/src/urlbar/completionwidget.h b/src/urlbar/completionwidget.h index e9851484..afd9b7e1 100644 --- a/src/urlbar/completionwidget.h +++ b/src/urlbar/completionwidget.h @@ -34,6 +34,7 @@ // KDE Includes #include +#include // Qt Includes #include @@ -49,8 +50,8 @@ public: virtual bool eventFilter(QObject *obj, QEvent *ev); void setVisible(bool visible); - QString searchEngine() { return _searchEngine; }; - void setCurrentEngine(const QString &engine) { _searchEngine = engine; }; + KService::Ptr searchEngine() { return _searchEngine; }; + void setCurrentEngine(KService::Ptr engine) { _searchEngine = engine; }; private slots: void itemChosen(ListItem *item, Qt::MouseButton = Qt::LeftButton); @@ -61,8 +62,6 @@ signals: void nextItemSubChoice(); private: - QString defaultSearchEngine(); - void insertSearchList(const UrlSearchList &list, const QString& text); void popup(); void clear(); @@ -76,7 +75,7 @@ private: UrlSearchList _list; int _currentIndex; - QString _searchEngine; + KService::Ptr _searchEngine; }; #endif // COMPLETION_WIDGET_H diff --git a/src/urlbar/listitem.cpp b/src/urlbar/listitem.cpp index 8f299e4f..8671c126 100644 --- a/src/urlbar/listitem.cpp +++ b/src/urlbar/listitem.cpp @@ -36,13 +36,12 @@ #include "application.h" #include "websnap.h" #include "completionwidget.h" +#include "searchengine.h" // KDE Includes #include -#include #include #include -#include #include // Qt Includes @@ -254,29 +253,37 @@ PreviewLabel::PreviewLabel(const QString &url, int width, int height, QWidget *p // --------------------------------------------------------------- - SearchListItem::SearchListItem(const UrlSearchItem &item, const QString &text, QWidget *parent) : ListItem(item, parent) , m_text(text) { - CompletionWidget *w = qobject_cast(parent); - QString currentEngine = w->searchEngine(); - kDebug() << currentEngine; + KService::Ptr currentEngine = SearchEngine::defaultEngine(); - m_iconLabel = new IconLabel("edit-find", this); //TODO: get the default engine icon - m_titleLabel = new TextLabel( searchItemTitle(currentEngine, text), QString(), this); - m_engineBar = new EngineBar(text, currentEngine, parent); + QString query = text; + KService::Ptr engine = SearchEngine::fromString(text); + if (engine) + { + query = query.remove(0, text.indexOf(SearchEngine::delimiter())+1); + } + else + { + engine = currentEngine; + } - // without this it will not work :) - m_url = m_engineBar->url(); + m_url = SearchEngine::buildQuery(engine, query); + + m_iconLabel = new IconLabel("edit-find", this); //TODO: get the default engine icon + m_titleLabel = new TextLabel( searchItemTitle(engine->name(), query), QString(), this); + m_engineBar = new EngineBar(currentEngine, parent); + layout()->addWidget( m_iconLabel ); layout()->addWidget( m_titleLabel ); layout()->addWidget( new QLabel( i18n("Engines: "), this ) ); layout()->addWidget( m_engineBar ); layout()->addWidget( new TypeIconLabel(item.type, this) ); - - connect(m_engineBar, SIGNAL(searchEngineChanged(QString, QString)), this, SLOT(changeSearchEngine(QString, QString))); + + connect(m_engineBar, SIGNAL(searchEngineChanged(KService::Ptr)), this, SLOT(changeSearchEngine(KService::Ptr))); } @@ -285,13 +292,11 @@ QString SearchListItem::searchItemTitle(QString engine, QString text) return QString(i18nc("%1=search engine, e.g. Google, Wikipedia %2=text to search for", "Search %1 for %2", engine, text)); } - -void SearchListItem::changeSearchEngine(QString url, QString engine) +void SearchListItem::changeSearchEngine(KService::Ptr engine) { - m_titleLabel->setText(searchItemTitle(engine,m_text)); - m_iconLabel->setPixmap(Application::icon( KUrl(url) ).pixmap(16)); - QString url2 = url.replace( QL1S("\\{@}"), m_text); - m_url = KUrl(url2); + m_titleLabel->setText(searchItemTitle(engine->name(),m_text)); + m_iconLabel->setPixmap(Application::icon( KUrl(engine->property("Query").toString()) ).pixmap(16)); + m_url = SearchEngine::buildQuery(engine, m_text); CompletionWidget *w = qobject_cast(parent()); w->setCurrentEngine( engine ); @@ -307,42 +312,21 @@ void SearchListItem::nextItemSubChoice() // ----------------------------------------------------------------------------------------------- -EngineBar::EngineBar(const QString &text, const QString &selectedEngine, QWidget *parent) - : KToolBar(parent) +EngineBar::EngineBar(KService::Ptr selectedEngine, QWidget *parent) +: KToolBar(parent) { setIconSize(QSize(16,16)); setToolButtonStyle(Qt::ToolButtonIconOnly); m_engineGroup = new QActionGroup(this); m_engineGroup->setExclusive(true); - - KConfig config("kuriikwsfilterrc"); //Share with konqueror - KConfigGroup cg = config.group("General"); - QStringList favoriteEngines; - favoriteEngines << "wikipedia" << "google"; //defaults - favoriteEngines = cg.readEntry("FavoriteSearchEngines", favoriteEngines); - - // default engine - CompletionWidget *w = qobject_cast(parent); - QString defaultEngine = w->searchEngine(); - KService::Ptr service = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(defaultEngine)); - - m_engineGroup->addAction(newEngineAction(service, selectedEngine)); - - // set url; - QString url = service->property("Query").toString(); - url = url.replace("\\{@}",text); - m_url = KUrl(url); - - Q_FOREACH(const QString &engine, favoriteEngines) + + m_engineGroup->addAction(newEngineAction(SearchEngine::defaultEngine(), selectedEngine)); + foreach(KService::Ptr engine, SearchEngine::favorites()) { - if(!engine.isEmpty()) + if(engine->desktopEntryName()!=SearchEngine::defaultEngine()->desktopEntryName()) { - service = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(engine)); - if(service && service->desktopEntryName() != defaultEngine) - { - m_engineGroup->addAction(newEngineAction(service, selectedEngine)); - } + m_engineGroup->addAction(newEngineAction(engine, selectedEngine)); } } @@ -350,18 +334,14 @@ EngineBar::EngineBar(const QString &text, const QString &selectedEngine, QWidget } -KAction *EngineBar::newEngineAction(KService::Ptr service, QString selectedEngine) +KAction *EngineBar::newEngineAction(KService::Ptr engine, KService::Ptr selectedEngine) { - KAction *a = new KAction(Application::icon(m_url), service->name(), this); + QString url = engine->property("Query").toString(); + KAction *a = new KAction(Application::icon(url), engine->name(), this); a->setCheckable(true); - if (service->name()==selectedEngine) - a->setChecked(true); - - QString url = service->property("Query").toString(); - - a->setData( QStringList() << url << service->desktopEntryName() ); + if (engine->desktopEntryName()==selectedEngine->desktopEntryName()) a->setChecked(true); + a->setData(engine->entryPath()); connect(a, SIGNAL(triggered(bool)), this, SLOT(changeSearchEngine())); - return a; } @@ -369,8 +349,7 @@ KAction *EngineBar::newEngineAction(KService::Ptr service, QString selectedEngin void EngineBar::changeSearchEngine() { KAction *a = qobject_cast(sender()); - QStringList list = a->data().toStringList(); - emit searchEngineChanged(list.first(), list.last()); + emit searchEngineChanged(KService::serviceByDesktopPath(a->data().toString())); } diff --git a/src/urlbar/listitem.h b/src/urlbar/listitem.h index de42fd03..c15ef3f9 100644 --- a/src/urlbar/listitem.h +++ b/src/urlbar/listitem.h @@ -126,22 +126,18 @@ class EngineBar : public KToolBar Q_OBJECT public: - EngineBar(const QString &text, const QString &selectedEngine, QWidget *parent = 0); - + EngineBar(KService::Ptr selectedEngine, QWidget *parent = 0); void selectNextEngine(); - KUrl url() { return m_url; }; signals: - void searchEngineChanged(QString url, QString engine); + void searchEngineChanged(KService::Ptr engine); private slots: void changeSearchEngine(); private: - KAction *newEngineAction(KService::Ptr service, QString selectedEngine); - + KAction *newEngineAction(KService::Ptr engine, KService::Ptr selectedEngine); QActionGroup *m_engineGroup; - KUrl m_url; }; @@ -159,7 +155,7 @@ public slots: virtual void nextItemSubChoice(); private slots: - void changeSearchEngine(QString url, QString engine); + void changeSearchEngine(KService::Ptr engine); private: QString searchItemTitle(QString engine, QString text); @@ -167,8 +163,8 @@ private: TextLabel* m_titleLabel; IconLabel* m_iconLabel; EngineBar* m_engineBar; - QString m_text; + KService::Ptr m_currentEngine; }; diff --git a/src/urlbar/urlresolver.cpp b/src/urlbar/urlresolver.cpp index e4a45105..362484a6 100644 --- a/src/urlbar/urlresolver.cpp +++ b/src/urlbar/urlresolver.cpp @@ -184,15 +184,7 @@ UrlSearchList UrlResolver::qurlFromUserInputResolution() // STEP 2 = Web Searches UrlSearchList UrlResolver::webSearchesResolution() { - UrlSearchList list; - - if(KUrl(_typedString).isRelative()) - { - UrlSearchItem gItem(UrlSearchItem::Search, KUrl(), QString() ); // others will find this url.. - list << gItem; - } - - return list; + return UrlSearchList() << UrlSearchItem(UrlSearchItem::Search, KUrl(), QString()); } -- cgit v1.2.1