summaryrefslogtreecommitdiffstats
path: root/plugins/search/searchtab.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/search/searchtab.cpp')
-rw-r--r--plugins/search/searchtab.cpp169
1 files changed, 169 insertions, 0 deletions
diff --git a/plugins/search/searchtab.cpp b/plugins/search/searchtab.cpp
new file mode 100644
index 0000000..1beaa6a
--- /dev/null
+++ b/plugins/search/searchtab.cpp
@@ -0,0 +1,169 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Joris Guisson *
+ * *
+ * 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 <qfile.h>
+#include <qtextstream.h>
+#include <qapplication.h>
+#include <qlistbox.h>
+#include <qcheckbox.h>
+#include <kglobal.h>
+#include <kpushbutton.h>
+#include <kiconloader.h>
+#include <kcombobox.h>
+#include <kcompletion.h>
+#include <qlabel.h>
+#include <klocale.h>
+#include "searchtab.h"
+#include "searchenginelist.h"
+#include "searchpluginsettings.h"
+#include "functions.h"
+
+using namespace bt;
+
+namespace kt
+{
+
+ SearchTab::SearchTab(KToolBar* tb) : m_tool_bar(tb)
+ {
+ m_search_text = new KComboBox(tb);
+ m_search_text->setEditable(true);
+
+ m_clear_button = new KPushButton(tb);
+ m_search_new_tab = new KPushButton(i18n("Search"),tb);
+ m_search_engine = new KComboBox(tb);
+
+ m_clear_button->setIconSet(SmallIconSet(QApplication::reverseLayout() ? "clear_left" : "locationbar_erase"));
+ m_clear_button->setEnabled(false);
+
+ connect(m_search_new_tab,SIGNAL(clicked()),this,SLOT(searchNewTabPressed()));
+ connect(m_search_text,SIGNAL(returnPressed(const QString&)),this,SLOT(searchBoxReturn( const QString& )));
+ connect(m_search_text,SIGNAL(textChanged(const QString &)),this,SLOT(textChanged( const QString& )));
+ connect(m_clear_button,SIGNAL(clicked()),this,SLOT(clearButtonPressed()));
+ m_search_text->setMaxCount(20);
+ m_search_new_tab->setEnabled(false);
+ m_search_text->setInsertionPolicy(QComboBox::NoInsertion);
+
+ tb->insertWidget(1,-1,m_clear_button);
+ tb->insertWidget(2,-1,m_search_text);
+ tb->insertWidget(3,-1,m_search_new_tab);
+ tb->insertWidget(4,-1,new QLabel(i18n(" Engine: "),tb));
+ tb->insertWidget(5,-1,m_search_engine);
+ loadSearchHistory();
+ }
+
+ SearchTab::~SearchTab()
+ {
+ }
+
+ void SearchTab::saveSettings()
+ {
+ SearchPluginSettings::setSearchEngine(m_search_engine->currentItem());
+ SearchPluginSettings::writeConfig();
+ }
+
+ void SearchTab::updateSearchEngines(const SearchEngineList & sl)
+ {
+ int ci = 0;
+ if (m_search_engine->count() == 0)
+ ci = SearchPluginSettings::searchEngine();
+ else
+ ci = m_search_engine->currentItem();
+
+ m_search_engine->clear();
+ for (Uint32 i = 0;i < sl.getNumEngines();i++)
+ {
+ m_search_engine->insertItem(sl.getEngineName(i));
+ }
+ m_search_engine->setCurrentItem(ci);
+ }
+
+ void SearchTab::searchBoxReturn(const QString & str)
+ {
+ KCompletion *comp = m_search_text->completionObject();
+ if (!m_search_text->contains(str))
+ {
+ comp->addItem(str);
+ m_search_text->insertItem(str);
+ }
+ m_search_text->clearEdit();
+ saveSearchHistory();
+ search(str,m_search_engine->currentItem(),SearchPluginSettings::openInExternal());
+ }
+
+ void SearchTab::clearButtonPressed()
+ {
+ m_search_text->clearEdit();
+ }
+
+ void SearchTab::searchNewTabPressed()
+ {
+ searchBoxReturn(m_search_text->currentText());
+ }
+
+ void SearchTab::textChanged(const QString & str)
+ {
+ m_search_new_tab->setEnabled(str.length() > 0);
+ m_clear_button->setEnabled(str.length() > 0);
+ }
+
+ void SearchTab::loadSearchHistory()
+ {
+ QFile fptr(kt::DataDir() + "search_history");
+ if (!fptr.open(IO_ReadOnly))
+ return;
+
+ KCompletion *comp = m_search_text->completionObject();
+
+ Uint32 cnt = 0;
+ QTextStream in(&fptr);
+ while (!in.atEnd() && cnt < 50)
+ {
+ QString line = in.readLine();
+ if (line.isNull())
+ break;
+
+ if (!m_search_text->contains(line))
+ {
+ comp->addItem(line);
+ m_search_text->insertItem(line);
+ }
+ cnt++;
+ }
+
+ m_search_text->clearEdit();
+ }
+
+ void SearchTab::saveSearchHistory()
+ {
+ QFile fptr(kt::DataDir() + "search_history");
+ if (!fptr.open(IO_WriteOnly))
+ return;
+
+ QTextStream out(&fptr);
+ KCompletion *comp = m_search_text->completionObject();
+ QStringList items = comp->items();
+ for (QStringList::iterator i = items.begin();i != items.end();i++)
+ {
+ out << *i << endl;
+ }
+ }
+}
+
+#include "searchtab.moc"
+