-#include <QtGui>
-#include <QDebug>
-#include <QFileInfo>
#include <QDir>
-#include <QModelIndex>
-
-#ifdef Q_WS_MAEMO_5
-#include <QtMaemo5/QMaemo5InformationBox>
-#endif
+#include <QtGui>
#include "librarydialog.h"
#include "library.h"
#include "listview.h"
#include "trace.h"
#include "bookfinder.h"
+#include "searchdialog.h"
+#include "platform.h"
+#include "searchresultsdialog.h"
+#include "progressdialog.h"
+#include "settings.h"
LibraryDialog::LibraryDialog(QWidget *parent): ListWindow(parent)
{
+ TRACE;
setWindowTitle(tr("Library"));
+ setAttribute(Qt::WA_DeleteOnClose, true);
// Add actions
+ sortByTitle = addMenuAction(tr("Sort by title"), this, SLOT(onSortByTitle()));
+ sortByAuthor =
+ addMenuAction(tr("Sort by author"), this, SLOT(onSortByAuthor()));
+
#ifndef Q_WS_MAEMO_5
addItemAction(tr("Details"), this, SLOT(onDetails()));
addItemAction(tr("Read"), this, SLOT(onRead()));
addItemAction(tr("Delete"), this, SLOT(onRemove()));
#endif // ! Q_WS_MAEMO_5
- addAction(tr("Add book"), this, SLOT(onAdd()), ":/icons/add.png");
- addAction(tr("Add books from folder"), this, SLOT(onAddFolder()),
- ":/icons/folder.png");
+ addAction(tr("Add book"), this, SLOT(onAdd()), "add");
+ addAction(tr("Add books from folder"), this, SLOT(onAddFolder()), "folder");
+ addAction(tr("Search the Web"), this, SLOT(onSearch()), "search");
// Create and add list view
list = new ListView(this);
list->setSpacing(1);
Library *library = Library::instance();
QModelIndex current = library->nowReading();
- setSelected(current);
+ setSelected(sortedLibrary->mapFromSource(current));
addList(list);
- progress = new QProgressDialog(tr("Adding books"), "", 0, 0, this);
- progress->reset();
- progress->setMinimumDuration(0);
- progress->setWindowModality(Qt::WindowModal);
- progress->setCancelButton(0);
+ progress = new ProgressDialog(tr("Adding books"), this);
connect(Library::instance(), SIGNAL(nowReadingChanged()),
this, SLOT(onCurrentBookChanged()));
SLOT(onBookAdded()));
connect(list, SIGNAL(activated(const QModelIndex &)),
this, SLOT(onItemActivated(const QModelIndex &)));
+
+ // Create search dialog
+ searchDialog = new SearchDialog(this);
+ connect(Search::instance(), SIGNAL(endSearch()),
+ this, SLOT(showSearchResults()));
+
+ // Retrieve default sort criteria
+ switch (Settings::instance()->value("lib/sortby").toInt()) {
+ case SortedLibrary::SortByAuthor:
+ onSortByAuthor();
+ break;
+ default:
+ onSortByTitle();
+ }
}
void LibraryDialog::onAdd()
// Add book to library
QModelIndex index = library->find(path);
if (index.isValid()) {
-#ifdef Q_WS_MAEMO_5
- QMaemo5InformationBox::information(this,
- tr("This book is already in the library"),
- QMaemo5InformationBox::DefaultTimeout);
-#else
- (void)QMessageBox::information(this, tr("Dorian"),
- tr("This book is already in the library"), QMessageBox::Ok);
-#endif // Q_WS_MAEMO_5
- setSelected(index);
+ Platform::instance()->information(
+ tr("This book is already in the library"), this);
+ setSelected(sortedLibrary->mapFromSource(index));
}
else {
library->add(path);
void LibraryDialog::onBookAdded()
{
Library *library = Library::instance();
- setSelected(library->index(library->rowCount() - 1));
+ setSelected(sortedLibrary->
+ mapFromSource(library->index(library->rowCount() - 1)));
}
#ifndef Q_WS_MAEMO_5
void LibraryDialog::onRead()
{
- qDebug() << "LibraryDialog::onRead";
QModelIndex current = sortedLibrary->mapToSource(list->currentIndex());
if (current.isValid()) {
Library::instance()->setNowReading(current);
void LibraryDialog::onItemActivated(const QModelIndex &index)
{
- qDebug() << "LibraryDialog::onItemActivated";
+ TRACE;
QModelIndex libraryIndex = sortedLibrary->mapToSource(index);
Book *book = Library::instance()->book(libraryIndex);
(new InfoDialog(book, this))->exec();
}
-QString LibraryDialog::createItemText(const Book *book)
+QString LibraryDialog::createItemText(Book *book)
{
- QString text = book->title + "\n";
+ Q_ASSERT(book);
+ QString text = book->shortName() + "\n";
if (book->creators.size()) {
text += book->creators[0];
for (int i = 1; i < book->creators.size(); i++) {
void LibraryDialog::onAddFolder()
{
- Trace t("LibraryDialog::onAddFolder");
+ TRACE;
// Get folder name
Settings *settings = Settings::instance();
switch (added) {
case 0: msg = tr("No new books found"); break;
- case 1: msg = tr("One new book added"); break;
- default: msg = tr("%1 new books added").arg(added);
+ case 1: msg = tr("One book added"); break;
+ default: msg = tr("%1 books added").arg(added);
}
progress->reset();
qDebug() << "LibraryDialog::onRefreshDone:" << msg;
-#ifdef Q_WS_MAEMO_5
- QMaemo5InformationBox::information(this, msg);
-#else
- // FIXME
-#endif
+ Platform::instance()->information(msg, this);
}
void LibraryDialog::onAddFromFolder(const QString &path)
progress->setLabelText(QFileInfo(path).fileName());
progress->setValue(progress->value() + 1);
}
+
+void LibraryDialog::onSearch()
+{
+ int ret = searchDialog->exec();
+ if (ret != QDialog::Accepted) {
+ return;
+ }
+ progress->setLabelText(tr("Searching Project Gutenberg"));
+ progress->showWait();
+ Search::instance()->start(searchDialog->query());
+}
+
+void LibraryDialog::showSearchResults()
+{
+ progress->reset();
+ QList<Search::Result> results = Search::instance()->results();
+ if (results.isEmpty()) {
+ QMessageBox::information(this, tr("Search results"),
+ tr("No books found"));
+ return;
+ }
+
+ SearchResultsDialog *dialog = new SearchResultsDialog(results, this);
+ connect(dialog, SIGNAL(add(const Search::Result &)),
+ this, SLOT(onAddSearchResult(const Search::Result &)));
+ dialog->show();
+}
+
+void LibraryDialog::onSortByAuthor()
+{
+ TRACE;
+ sortedLibrary->setSortBy(SortedLibrary::SortByAuthor);
+ Settings::instance()->setValue("lib/sortby", SortedLibrary::SortByAuthor);
+ sortByAuthor->setChecked(true);
+ sortByTitle->setChecked(false);
+}
+
+void LibraryDialog::onSortByTitle()
+{
+ TRACE;
+ sortedLibrary->setSortBy(SortedLibrary::SortByTitle);
+ Settings::instance()->setValue("lib/sortby", SortedLibrary::SortByTitle);
+ sortByAuthor->setChecked(false);
+ sortByTitle->setChecked(true);
+}