You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.4 KiB
103 lines
3.4 KiB
/****************************************************************************
|
|
**
|
|
** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
|
|
**
|
|
** This file is part of an example program for Qt. This example
|
|
** program may be used, distributed and modified without limitation.
|
|
**
|
|
*****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
** ui.h extension file, included from the uic-generated form implementation.
|
|
**
|
|
** If you wish to add, delete or rename functions or slots use
|
|
** Qt Designer which will update this file, preserving your code. Create an
|
|
** init() function in place of a constructor, and a destroy() function in
|
|
** place of a destructor.
|
|
*****************************************************************************/
|
|
|
|
void ArchiveDialog::init()
|
|
{
|
|
connect(&articleSearcher, SIGNAL(done(bool)), this, SLOT(searchDone(bool)));
|
|
connect(&articleFetcher, SIGNAL(done(bool)), this, SLOT(fetchDone(bool)));
|
|
connect(myListView, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(fetch(QListViewItem*)));
|
|
connect(myLineEdit, SIGNAL(returnPressed()), this, SLOT(search()));
|
|
connect(myListView, SIGNAL(returnPressed(QListViewItem*)), this, SLOT(fetch(QListViewItem*)));
|
|
connect(myPushButton, SIGNAL(clicked()), this, SLOT(close()));
|
|
}
|
|
|
|
void ArchiveDialog::fetch( QListViewItem *it )
|
|
{
|
|
QUrl u(it->text(1));
|
|
articleFetcher.setHost(u.host());
|
|
articleFetcher.get(it->text(1));
|
|
}
|
|
|
|
void ArchiveDialog::fetchDone( bool error )
|
|
{
|
|
if (error) {
|
|
QMessageBox::critical(this, "Error fetching",
|
|
"An error occurred when fetching this document: "
|
|
+ articleFetcher.errorString(),
|
|
QMessageBox::Ok, QMessageBox::NoButton);
|
|
} else {
|
|
myTextBrowser->setText(articleFetcher.readAll());
|
|
}
|
|
}
|
|
|
|
void ArchiveDialog::search()
|
|
{
|
|
if (articleSearcher.state() == QHttp::HostLookup
|
|
|| articleSearcher.state() == QHttp::Connecting
|
|
|| articleSearcher.state() == QHttp::Sending
|
|
|| articleSearcher.state() == QHttp::Reading) {
|
|
articleSearcher.abort();
|
|
}
|
|
|
|
if (myLineEdit->text() == "") {
|
|
QMessageBox::critical(this, "Empty query",
|
|
"Please type a search string.",
|
|
QMessageBox::Ok, QMessageBox::NoButton);
|
|
} else {
|
|
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
|
|
|
|
articleSearcher.setHost("lists.trolltech.com");
|
|
|
|
QHttpRequestHeader header("POST", "/qt-interest/search.php");
|
|
header.setValue("Host", "lists.trolltech.com");
|
|
header.setContentType("application/x-www-form-urlencoded");
|
|
|
|
QString encodedTopic = myLineEdit->text();
|
|
QUrl::encode(encodedTopic);
|
|
QString searchString = "qt-interest=on&search=" + encodedTopic;
|
|
|
|
articleSearcher.request(header, searchString.utf8());
|
|
}
|
|
|
|
}
|
|
|
|
void ArchiveDialog::searchDone( bool error )
|
|
{
|
|
if (error) {
|
|
QMessageBox::critical(this, "Error searching",
|
|
"An error occurred when searching: "
|
|
+ articleSearcher.errorString(),
|
|
QMessageBox::Ok, QMessageBox::NoButton);
|
|
} else {
|
|
QString result(articleSearcher.readAll());
|
|
|
|
QRegExp rx("<a href=\"(http://lists\\.trolltech\\.com/qt-interest/.*)\">(.*)</a>");
|
|
rx.setMinimal(TRUE);
|
|
int pos = 0;
|
|
while (pos >= 0) {
|
|
pos = rx.search(result, pos);
|
|
if (pos > -1) {
|
|
pos += rx.matchedLength();
|
|
new QListViewItem(myListView, rx.cap(2), rx.cap(1));
|
|
}
|
|
}
|
|
}
|
|
|
|
QApplication::restoreOverrideCursor();
|
|
}
|