summaryrefslogtreecommitdiffstats
path: root/plugins/search/searchwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/search/searchwidget.cpp')
-rw-r--r--plugins/search/searchwidget.cpp272
1 files changed, 272 insertions, 0 deletions
diff --git a/plugins/search/searchwidget.cpp b/plugins/search/searchwidget.cpp
new file mode 100644
index 0000000..2ed19e8
--- /dev/null
+++ b/plugins/search/searchwidget.cpp
@@ -0,0 +1,272 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Joris Guisson, Ivan Vasic *
+ * joris.guisson@gmail.com *
+ * ivasic@gmail.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, 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 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 <kapplication.h>
+#include <khtmlview.h>
+#include <qlayout.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <klineedit.h>
+#include <kpushbutton.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <kiconloader.h>
+#include <kcombobox.h>
+#include <kpopupmenu.h>
+#include <kparts/partmanager.h>
+#include <kio/job.h>
+#include <kmessagebox.h>
+#include <kfiledialog.h>
+#include <kprogress.h>
+#include <util/log.h>
+#include <torrent/globals.h>
+#include <interfaces/guiinterface.h>
+#include <interfaces/coreinterface.h>
+#include "searchwidget.h"
+#include "searchbar.h"
+#include "htmlpart.h"
+#include "searchplugin.h"
+#include "searchenginelist.h"
+
+
+
+using namespace bt;
+
+namespace kt
+{
+
+
+ SearchWidget::SearchWidget(SearchPlugin* sp) : html_part(0),sp(sp)
+ {
+ QVBoxLayout* layout = new QVBoxLayout(this);
+ layout->setAutoAdd(true);
+ sbar = new SearchBar(this);
+ html_part = new HTMLPart(this);
+
+ right_click_menu = new KPopupMenu(this);
+ right_click_menu->insertSeparator();
+ back_id = right_click_menu->insertItem(
+ KGlobal::iconLoader()->loadIconSet(QApplication::reverseLayout()
+ ? "forward" : "back",KIcon::Small),
+ i18n("Back"),html_part,SLOT(back()));
+ right_click_menu->insertItem(
+ KGlobal::iconLoader()->loadIconSet("reload",KIcon::Small),
+ i18n("Reload"),html_part,SLOT(reload()));
+
+ right_click_menu->setItemEnabled(back_id,false);
+ sbar->m_back->setEnabled(false);
+ connect(sbar->m_search_button,SIGNAL(clicked()),this,SLOT(searchPressed()));
+ connect(sbar->m_clear_button,SIGNAL(clicked()),this,SLOT(clearPressed()));
+ connect(sbar->m_search_text,SIGNAL(returnPressed()),this,SLOT(searchPressed()));
+ connect(sbar->m_back,SIGNAL(clicked()),html_part,SLOT(back()));
+ connect(sbar->m_reload,SIGNAL(clicked()),html_part,SLOT(reload()));
+
+ sbar->m_clear_button->setIconSet(
+ KGlobal::iconLoader()->loadIconSet(QApplication::reverseLayout()
+ ? "clear_left" : "locationbar_erase",KIcon::Small));
+ sbar->m_back->setIconSet(
+ KGlobal::iconLoader()->loadIconSet(QApplication::reverseLayout()
+ ? "forward" : "back", KIcon::Small));
+ sbar->m_reload->setIconSet(
+ KGlobal::iconLoader()->loadIconSet("reload",KIcon::Small));
+
+
+ connect(html_part,SIGNAL(backAvailable(bool )),
+ this,SLOT(onBackAvailable(bool )));
+ connect(html_part,SIGNAL(onURL(const QString& )),
+ this,SLOT(onURLHover(const QString& )));
+ connect(html_part,SIGNAL(openTorrent(const KURL& )),
+ this,SLOT(onOpenTorrent(const KURL& )));
+ connect(html_part,SIGNAL(popupMenu(const QString&, const QPoint& )),
+ this,SLOT(showPopupMenu(const QString&, const QPoint& )));
+ connect(html_part,SIGNAL(searchFinished()),this,SLOT(onFinished()));
+ connect(html_part,SIGNAL(saveTorrent(const KURL& )),
+ this,SLOT(onSaveTorrent(const KURL& )));
+
+ KParts::PartManager* pman = html_part->partManager();
+ connect(pman,SIGNAL(partAdded(KParts::Part*)),this,SLOT(onFrameAdded(KParts::Part* )));
+
+ connect(html_part->browserExtension(),SIGNAL(loadingProgress(int)),this,SLOT(loadingProgress(int)));
+ prog = 0;
+ }
+
+
+ SearchWidget::~SearchWidget()
+ {
+ if (prog)
+ {
+ sp->getGUI()->removeProgressBarFromStatusBar(prog);
+ prog = 0;
+ }
+ }
+
+ void SearchWidget::updateSearchEngines(const SearchEngineList & sl)
+ {
+ int ci = sbar->m_search_engine->currentItem();
+ sbar->m_search_engine->clear();
+ for (Uint32 i = 0;i < sl.getNumEngines();i++)
+ {
+ sbar->m_search_engine->insertItem(sl.getEngineName(i));
+ }
+ sbar->m_search_engine->setCurrentItem(ci);
+ }
+
+ void SearchWidget::onBackAvailable(bool available)
+ {
+ sbar->m_back->setEnabled(available);
+ right_click_menu->setItemEnabled(back_id,available);
+ }
+
+ void SearchWidget::onFrameAdded(KParts::Part* p)
+ {
+ KHTMLPart* frame = dynamic_cast<KHTMLPart*>(p);
+ if (frame)
+ {
+ connect(frame,SIGNAL(popupMenu(const QString&, const QPoint& )),
+ this,SLOT(showPopupMenu(const QString&, const QPoint& )));
+ }
+ }
+
+ void SearchWidget::copy()
+ {
+ if (!html_part)
+ return;
+ html_part->copy();
+ }
+
+ void SearchWidget::search(const QString & text,int engine)
+ {
+ if (!html_part)
+ return;
+
+ if (sbar->m_search_text->text() != text)
+ sbar->m_search_text->setText(text);
+
+ if (sbar->m_search_engine->currentItem() != engine)
+ sbar->m_search_engine->setCurrentItem(engine);
+
+ const SearchEngineList & sl = sp->getSearchEngineList();
+
+ if (engine < 0 || (Uint32)engine >= sl.getNumEngines())
+ engine = sbar->m_search_engine->currentItem();
+
+ QString s_url = sl.getSearchURL(engine).prettyURL();
+ s_url.replace("FOOBAR", KURL::encode_string(text), true);
+ KURL url = KURL::fromPathOrURL(s_url);
+
+ statusBarMsg(i18n("Searching for %1...").arg(text));
+ //html_part->openURL(url);
+ html_part->openURLRequest(url,KParts::URLArgs());
+ }
+
+ void SearchWidget::searchPressed()
+ {
+ search(sbar->m_search_text->text(),sbar->m_search_engine->currentItem());
+ }
+
+ void SearchWidget::clearPressed()
+ {
+ sbar->m_search_text->clear();
+ }
+
+ void SearchWidget::onURLHover(const QString & url)
+ {
+ statusBarMsg(url);
+ }
+
+ void SearchWidget::onFinished()
+ {
+ }
+
+ void SearchWidget::onOpenTorrent(const KURL & url)
+ {
+ openTorrent(url);
+ }
+
+ void SearchWidget::onSaveTorrent(const KURL & url)
+ {
+ KFileDialog fdlg(QString::null,"*.torrent | " + i18n("torrent files"),this,0,true);
+ fdlg.setSelection(url.fileName());
+ fdlg.setOperationMode(KFileDialog::Saving);
+ if (fdlg.exec() == QDialog::Accepted)
+ {
+ KURL save_url = fdlg.selectedURL();
+ // start a copy job
+ KIO::Job* j = KIO::file_copy(url,save_url,-1,true);
+ // let it deal with the errors
+ j->setAutoErrorHandlingEnabled(true,0);
+ }
+ }
+
+ void SearchWidget::showPopupMenu(const QString & url,const QPoint & p)
+ {
+ right_click_menu->popup(p);
+ }
+
+ KPopupMenu* SearchWidget::rightClickMenu()
+ {
+ return right_click_menu;
+ }
+
+ void SearchWidget::onShutDown()
+ {
+ delete html_part;
+ html_part = 0;
+ }
+
+ void SearchWidget::statusBarMsg(const QString & url)
+ {
+ sp->getGUI()->changeStatusbar(url);
+ }
+
+ void SearchWidget::openTorrent(const KURL & url)
+ {
+ sp->getCore()->load(url);
+ }
+
+ void SearchWidget::loadingProgress(int perc)
+ {
+ if (perc < 100 && !prog)
+ {
+ prog = sp->getGUI()->addProgressBarToStatusBar();
+ if (prog)
+ prog->setValue(perc);
+ }
+ else if (prog && perc < 100)
+ {
+ prog->setValue(perc);
+ }
+ else if (perc == 100)
+ {
+ if (prog)
+ {
+ sp->getGUI()->removeProgressBarFromStatusBar(prog);
+ prog = 0;
+ }
+ statusBarMsg(i18n("Search finished"));
+ }
+ }
+}
+
+#include "searchwidget.moc"