Download search results: initial steps.
authorAkos Polster <akos@pipacs.com>
Fri, 29 Oct 2010 16:57:25 +0000 (18:57 +0200)
committerAkos Polster <akos@pipacs.com>
Fri, 29 Oct 2010 16:57:25 +0000 (18:57 +0200)
dorian.pro
search.cpp
searchresultinfodialog.cpp [new file with mode: 0644]
searchresultinfodialog.h [new file with mode: 0644]
searchresultsdialog.cpp
searchresultsdialog.h

index af0dc0d..eb938a8 100644 (file)
@@ -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
index 3456670..ac96702 100644 (file)
@@ -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 (file)
index 0000000..bea9806
--- /dev/null
@@ -0,0 +1,30 @@
+#include <QtGui>
+
+#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 (file)
index 0000000..e5e84f7
--- /dev/null
@@ -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
index 302d0d8..0274822 100644 (file)
@@ -2,6 +2,8 @@
 
 #include "listview.h"
 #include "searchresultsdialog.h"
+#include "searchresultinfodialog.h"
+#include "trace.h"
 
 SearchResultsDialog::SearchResultsDialog(const QList<Search::Result> results_,
     QWidget *parent): ListWindow(parent), results(results_)
@@ -22,7 +24,25 @@ SearchResultsDialog::SearchResultsDialog(const QList<Search::Result> 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());
+}
index 96feeca..83917f3 100644 (file)
@@ -8,13 +8,20 @@
 #include "search.h"
 
 class ListView;
+class QModelIndex;
 
 class SearchResultsDialog: public ListWindow
 {
+    Q_OBJECT
+
 public:
     explicit SearchResultsDialog(const QList<Search::Result> searchResults,
                                  QWidget *parent = 0);
 
+protected slots:
+    void onDownload();
+    void onItemActivated(const QModelIndex &index);
+
 protected:
     const QList<Search::Result> results;
     ListView *list;