00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "search.h"
00018 #include "readonlyformbase.h"
00019 #include <qglobal.h>
00020 #include <qlabel.h>
00021 #include <qsqlquery.h>
00022 #include <qlayout.h>
00023 #include <qregexp.h>
00024 #include <qtextbrowser.h>
00025 #include <qlineedit.h>
00026 #include <qpushbutton.h>
00027 #include <qcheckbox.h>
00028 #include <qmessagebox.h>
00029 #include <qptrlist.h>
00030 #include <threadsearchevent.h>
00031 #include <fillsearchlist.h>
00032 #include "error.h"
00033 #include <qapplication.h>
00034 #include "urlevent.h"
00035 #include "searchtextbrowser.h"
00036
00037 Search::Search(LitUrl u, QObject *receiver, QString slot, QWidget *parent, const char *name):
00038 ReadOnlyFormBase(u, receiver, slot, parent, name), fillsearchlist(0L) {
00039 searchform=new SearchForm(this, "searchform");
00040 QHBoxLayout *l=new QHBoxLayout(this);
00041 l->addWidget(searchform);
00042 Q_ASSERT(searchform);
00043 setData();
00044 connect(searchform->start, SIGNAL(pressed()), this, SLOT(startSearch()));
00045 connect(searchform->results, SIGNAL(linkClicked(const QString&)), this, SLOT(linkClicked(const QString&)));
00046 connect(&threadtimer, SIGNAL(timeout()), SLOT(checkThreads()));
00047 }
00048
00049 void Search::checkThreads() {
00050 if(fillsearchlist && fillsearchlist->finished()) {
00051 searchform->start->setEnabled(true);
00052 threadtimer.stop();
00053 }
00054 }
00055
00056 void Search::linkClicked(const QString &link) {
00057 debug("Link clicked: "+link);
00058 qApp->postEvent(topLevelWidget(), new UrlEvent(link, true));
00059 }
00060
00061
00062 void Search::customEvent(QCustomEvent *e) {
00063 ThreadSearchEvent *l=dynamic_cast<ThreadSearchEvent*>(e);
00064 if(l) searchform->results->append(l->result());
00065 }
00066
00067 void Search::startSearch() {
00068 try {
00069 searchform->start->setEnabled(false);
00070 QString q=searchform->query->text();
00071 q=q.simplifyWhiteSpace();
00072 QStringList sl=QStringList::split(' ', q);
00073
00074 searchform->results->clear();
00075 fillsearchlist=new FillSearchList(this, sl);
00076 fillsearchlist->start();
00077 threadtimer.start(200, false);
00078 } catch(Error &e) {
00079 setValid(false);
00080 QMessageBox::warning(this, "Error", e.message());
00081 }
00082 }
00083
00084 bool Search::setData() {
00085 setValid(true);
00086 return true;
00087 }
00088
00089 Search::~Search() {
00090 }
00091
00092
00093