From 4259b7276912249c515aae70995aa606ddf344a3 Mon Sep 17 00:00:00 2001 From: Akos Polster Date: Fri, 29 Oct 2010 18:57:25 +0200 Subject: [PATCH] Download search results: initial steps. --- dorian.pro | 6 ++++-- search.cpp | 1 + searchresultinfodialog.cpp | 30 ++++++++++++++++++++++++++++++ searchresultinfodialog.h | 18 ++++++++++++++++++ searchresultsdialog.cpp | 20 ++++++++++++++++++++ searchresultsdialog.h | 7 +++++++ 6 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 searchresultinfodialog.cpp create mode 100644 searchresultinfodialog.h diff --git a/dorian.pro b/dorian.pro index af0dc0d..eb938a8 100644 --- a/dorian.pro +++ b/dorian.pro @@ -37,7 +37,8 @@ SOURCES += \ search.cpp \ widgets/flickable.cpp \ widgets/listview.cpp \ - searchresultsdialog.cpp + searchresultsdialog.cpp \ + searchresultinfodialog.cpp HEADERS += \ mainwindow.h \ @@ -76,7 +77,8 @@ HEADERS += \ searchdialog.h \ search.h \ widgets/flickable.h \ - searchresultsdialog.h + searchresultsdialog.h \ + searchresultinfodialog.h RESOURCES += \ dorian.qrc diff --git a/search.cpp b/search.cpp index 3456670..ac96702 100644 --- a/search.cpp +++ b/search.cpp @@ -105,6 +105,7 @@ void Search::finished() r.title = titles[0]; } r.language = cols[4].toPlainText().trimmed(); + r.source = "Project Gutenberg"; searchResults.append(r); qDebug() << id; qDebug() << " Authors:" << r.authors; diff --git a/searchresultinfodialog.cpp b/searchresultinfodialog.cpp new file mode 100644 index 0000000..bea9806 --- /dev/null +++ b/searchresultinfodialog.cpp @@ -0,0 +1,30 @@ +#include + +#include "searchresultinfodialog.h" +#include "search.h" +#include "trace.h" + +SearchResultInfoDialog::SearchResultInfoDialog(const Search::Result &result_, + QWidget *parent): + Dyalog(parent), result(result_) +{ + setWindowTitle(tr("Book Details")); + + QLabel *title = new QLabel(result.title, this); + addWidget(title); + if (result.authors.size()) { + QLabel *creators = new QLabel(this); + QString c = "By " + result.authors[0]; + for (int i = 1; i < result.authors.size(); i++) { + c += ", " + result.authors[i]; + } + creators->setText(c); + creators->setWordWrap(true); + addWidget(creators); + } + QLabel *source = new QLabel(tr("Source: %1").arg(result.source), this); + addWidget(source); + addStretch(); + addButton(tr("Download"), this, SLOT(accept()), QDialogButtonBox::ActionRole); + addButton(tr("Close"), this, SLOT(reject()), QDialogButtonBox::DestructiveRole); +} diff --git a/searchresultinfodialog.h b/searchresultinfodialog.h new file mode 100644 index 0000000..e5e84f7 --- /dev/null +++ b/searchresultinfodialog.h @@ -0,0 +1,18 @@ +#ifndef SEARCHRESULTINFODIALOG_H +#define SEARCHRESULTINFODIALOG_H + +#include "dyalog.h" +#include "search.h" + +class SearchResultInfoDialog: public Dyalog +{ + Q_OBJECT +public: + explicit SearchResultInfoDialog(const Search::Result &result, + QWidget *parent = 0); + +private: + const Search::Result &result; +}; + +#endif // SEARCHRESULTINFODIALOG_H diff --git a/searchresultsdialog.cpp b/searchresultsdialog.cpp index 302d0d8..0274822 100644 --- a/searchresultsdialog.cpp +++ b/searchresultsdialog.cpp @@ -2,6 +2,8 @@ #include "listview.h" #include "searchresultsdialog.h" +#include "searchresultinfodialog.h" +#include "trace.h" SearchResultsDialog::SearchResultsDialog(const QList results_, QWidget *parent): ListWindow(parent), results(results_) @@ -22,7 +24,25 @@ SearchResultsDialog::SearchResultsDialog(const QList results_, list->setModel(model); list->setUniformItemSizes(true); addList(list); + addItemAction(tr("Download book"), this, SLOT(onDownload())); connect(list, SIGNAL(activated(const QModelIndex &)), this, SLOT(onItemActivated(const QModelIndex &))); } +void SearchResultsDialog::onItemActivated(const QModelIndex &index) +{ + Trace t("SearchResultsDialog::onItemActivated"); + Search::Result result = results[index.row()]; + qDebug() << "Book" << index.row() << ":" << result.title; + SearchResultInfoDialog *d = new SearchResultInfoDialog(result, this); + d->setAttribute(Qt::WA_DeleteOnClose); + int ret = d->exec(); + if (ret == QDialog::Accepted) { + qDebug() << "Accepted -> Start download"; + } +} + +void SearchResultsDialog::onDownload() +{ + onItemActivated(list->currentIndex()); +} diff --git a/searchresultsdialog.h b/searchresultsdialog.h index 96feeca..83917f3 100644 --- a/searchresultsdialog.h +++ b/searchresultsdialog.h @@ -8,13 +8,20 @@ #include "search.h" class ListView; +class QModelIndex; class SearchResultsDialog: public ListWindow { + Q_OBJECT + public: explicit SearchResultsDialog(const QList searchResults, QWidget *parent = 0); +protected slots: + void onDownload(); + void onItemActivated(const QModelIndex &index); + protected: const QList results; ListView *list; -- 1.7.9.5