summaryrefslogtreecommitdiffstats
path: root/src/plugins/search/searchwidget.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <[email protected]>2025-03-02 18:37:22 +0900
committerMichele Calgaro <[email protected]>2025-03-06 12:31:12 +0900
commit44ef0bd5fe47a43e47aec5f7981b6c1d728dd9a8 (patch)
tree2b29e921a9bccea53444ed9bbed06a25a5fe20cc /src/plugins/search/searchwidget.cpp
parentd1f24dae035c506d945ca13f2be398aa0a4de8cc (diff)
downloadktorrent-44ef0bd5fe47a43e47aec5f7981b6c1d728dd9a8.tar.gz
ktorrent-44ef0bd5fe47a43e47aec5f7981b6c1d728dd9a8.zip
Restructure source files into 'src' subfolderHEADmaster
Signed-off-by: Michele Calgaro <[email protected]>
Diffstat (limited to 'src/plugins/search/searchwidget.cpp')
-rw-r--r--src/plugins/search/searchwidget.cpp272
1 files changed, 272 insertions, 0 deletions
diff --git a/src/plugins/search/searchwidget.cpp b/src/plugins/search/searchwidget.cpp
new file mode 100644
index 0000000..39ec574
--- /dev/null
+++ b/src/plugins/search/searchwidget.cpp
@@ -0,0 +1,272 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Joris Guisson, Ivan Vasic *
+ * *
+ * 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 <tdeapplication.h>
+#include <tdehtmlview.h>
+#include <tqlayout.h>
+#include <tqfile.h>
+#include <tqtextstream.h>
+#include <tqstring.h>
+#include <tqstringlist.h>
+#include <klineedit.h>
+#include <kpushbutton.h>
+#include <tdeglobal.h>
+#include <tdelocale.h>
+#include <tdestandarddirs.h>
+#include <kiconloader.h>
+#include <kcombobox.h>
+#include <tdepopupmenu.h>
+#include <tdeparts/partmanager.h>
+#include <tdeio/job.h>
+#include <tdemessagebox.h>
+#include <tdefiledialog.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)
+ {
+ TQVBoxLayout* layout = new TQVBoxLayout(this);
+ layout->setAutoAdd(true);
+ sbar = new SearchBar(this);
+ html_part = new HTMLPart(this);
+
+ right_click_menu = new TDEPopupMenu(this);
+ right_click_menu->insertSeparator();
+ back_id = right_click_menu->insertItem(
+ TDEGlobal::iconLoader()->loadIconSet(TQApplication::reverseLayout()
+ ? "forward" : "back",TDEIcon::Small),
+ i18n("Back"),html_part,TQ_SLOT(back()));
+ right_click_menu->insertItem(
+ TDEGlobal::iconLoader()->loadIconSet("reload",TDEIcon::Small),
+ i18n("Reload"),html_part,TQ_SLOT(reload()));
+
+ right_click_menu->setItemEnabled(back_id,false);
+ sbar->m_back->setEnabled(false);
+ connect(sbar->m_search_button,TQ_SIGNAL(clicked()),this,TQ_SLOT(searchPressed()));
+ connect(sbar->m_clear_button,TQ_SIGNAL(clicked()),this,TQ_SLOT(clearPressed()));
+ connect(sbar->m_search_text,TQ_SIGNAL(returnPressed()),this,TQ_SLOT(searchPressed()));
+ connect(sbar->m_back,TQ_SIGNAL(clicked()),html_part,TQ_SLOT(back()));
+ connect(sbar->m_reload,TQ_SIGNAL(clicked()),html_part,TQ_SLOT(reload()));
+
+ sbar->m_clear_button->setIconSet(
+ TDEGlobal::iconLoader()->loadIconSet(TQApplication::reverseLayout()
+ ? "clear_left" : "locationbar_erase",TDEIcon::Small));
+ sbar->m_back->setIconSet(
+ TDEGlobal::iconLoader()->loadIconSet(TQApplication::reverseLayout()
+ ? "forward" : "back", TDEIcon::Small));
+ sbar->m_reload->setIconSet(
+ TDEGlobal::iconLoader()->loadIconSet("reload",TDEIcon::Small));
+
+
+ connect(html_part,TQ_SIGNAL(backAvailable(bool )),
+ this,TQ_SLOT(onBackAvailable(bool )));
+ connect(html_part,TQ_SIGNAL(onURL(const TQString& )),
+ this,TQ_SLOT(onURLHover(const TQString& )));
+ connect(html_part,TQ_SIGNAL(openTorrent(const KURL& )),
+ this,TQ_SLOT(onOpenTorrent(const KURL& )));
+ connect(html_part,TQ_SIGNAL(popupMenu(const TQString&, const TQPoint& )),
+ this,TQ_SLOT(showPopupMenu(const TQString&, const TQPoint& )));
+ connect(html_part,TQ_SIGNAL(searchFinished()),this,TQ_SLOT(onFinished()));
+ connect(html_part,TQ_SIGNAL(saveTorrent(const KURL& )),
+ this,TQ_SLOT(onSaveTorrent(const KURL& )));
+
+ KParts::PartManager* pman = html_part->partManager();
+ connect(pman,TQ_SIGNAL(partAdded(KParts::Part*)),this,TQ_SLOT(onFrameAdded(KParts::Part* )));
+
+ connect(html_part->browserExtension(),TQ_SIGNAL(loadingProgress(int)),this,TQ_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)
+ {
+ TDEHTMLPart* frame = dynamic_cast<TDEHTMLPart*>(p);
+ if (frame)
+ {
+ connect(frame,TQ_SIGNAL(popupMenu(const TQString&, const TQPoint& )),
+ this,TQ_SLOT(showPopupMenu(const TQString&, const TQPoint& )));
+ }
+ }
+
+ void SearchWidget::copy()
+ {
+ if (!html_part)
+ return;
+ html_part->copy();
+ }
+
+ void SearchWidget::search(const TQString & 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();
+
+ TQString 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 TQString & url)
+ {
+ statusBarMsg(url);
+ }
+
+ void SearchWidget::onFinished()
+ {
+ }
+
+ void SearchWidget::onOpenTorrent(const KURL & url)
+ {
+ openTorrent(url);
+ }
+
+ void SearchWidget::onSaveTorrent(const KURL & url)
+ {
+ KFileDialog fdlg(TQString(),"*.torrent | " + i18n("torrent files"),this,0,true);
+ fdlg.setSelection(url.fileName());
+ fdlg.setOperationMode(KFileDialog::Saving);
+ if (fdlg.exec() == TQDialog::Accepted)
+ {
+ KURL save_url = fdlg.selectedURL();
+ // start a copy job
+ TDEIO::Job* j = TDEIO::file_copy(url,save_url,-1,true);
+ // let it deal with the errors
+ j->setAutoErrorHandlingEnabled(true,0);
+ }
+ }
+
+ void SearchWidget::showPopupMenu(const TQString & url,const TQPoint & p)
+ {
+ right_click_menu->popup(p);
+ }
+
+ TDEPopupMenu* SearchWidget::rightClickMenu()
+ {
+ return right_click_menu;
+ }
+
+ void SearchWidget::onShutDown()
+ {
+ delete html_part;
+ html_part = 0;
+ }
+
+ void SearchWidget::statusBarMsg(const TQString & 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"