X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=librarydialog.cpp;h=e45fe8f54b77fb414bc8efe45195c5c33d90d172;hb=eb7454931af4ddb10783fd9f3d93eb1251aeb5fb;hp=bdecff5fe0254cc238277ae18ee999b86dd722be;hpb=fb0f700559dc6ae38e4544b66101d44077244839;p=dorian diff --git a/librarydialog.cpp b/librarydialog.cpp index bdecff5..e45fe8f 100644 --- a/librarydialog.cpp +++ b/librarydialog.cpp @@ -1,12 +1,5 @@ -#include -#include -#include #include -#include - -#ifdef Q_WS_MAEMO_5 -#include -#endif +#include #include "librarydialog.h" #include "library.h" @@ -15,56 +8,60 @@ #include "infodialog.h" #include "settings.h" #include "listwindow.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) +LibraryDialog::LibraryDialog(QWidget *parent): ListWindow(tr("(No books)"), parent) { + TRACE; setWindowTitle(tr("Library")); + setAttribute(Qt::WA_DeleteOnClose, true); - // Add actions + // Add menu 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 + // Set model + sortedLibrary = new SortedLibrary(this); + setModel(sortedLibrary); - 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"); + // Add action buttons + addButton(tr("Add book"), this, SLOT(onAdd()), "add"); + addButton(tr("Add books from folder"), this, SLOT(onAddFolder()), "folder"); + addButton(tr("Search the Web"), this, SLOT(onSearch()), "search"); - // Create and add list view - list = new ListView(this); - sortedLibrary = new SortedLibrary(this); - list->setModel(sortedLibrary); - list->setSelectionMode(QAbstractItemView::SingleSelection); - list->setSpacing(1); + // Set selected item Library *library = Library::instance(); QModelIndex current = library->nowReading(); - setSelected(current); - addList(list); + setCurrentItem(sortedLibrary->mapFromSource(current)); + // Search dialog box + searchDialog = new SearchDialog(this); + connect(Search::instance(), SIGNAL(endSearch()), + this, SLOT(showSearchResults())); + + // Progress bar progress = new ProgressDialog(tr("Adding books"), this); - connect(Library::instance(), SIGNAL(nowReadingChanged()), - this, SLOT(onCurrentBookChanged())); - connect(Library::instance(), - SIGNAL(rowsInserted(const QModelIndex &, int, int)), - this, - SLOT(onBookAdded())); - connect(list, SIGNAL(activated(const QModelIndex &)), + connect(library, SIGNAL(rowsInserted(const QModelIndex &, int, int)), + this, SLOT(onBookAdded())); + connect(this, 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() @@ -90,15 +87,9 @@ 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); @@ -108,54 +99,35 @@ void LibraryDialog::onAdd() 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::onRemove() -{ - QModelIndex current = sortedLibrary->mapToSource(list->currentIndex()); - if (current.isValid()) { - Book *currentBook = Library::instance()->book(current); - QString title = currentBook->name(); - if (QMessageBox::Yes == - QMessageBox::question(this, tr("Delete book"), - tr("Delete book \"%1\" from library?"). - arg(currentBook->shortName()), - QMessageBox::Yes | QMessageBox::No)) { - Library::instance()->remove(current); - } - } -} - -void LibraryDialog::onRead() -{ - qDebug() << "LibraryDialog::onRead"; - QModelIndex current = sortedLibrary->mapToSource(list->currentIndex()); - if (current.isValid()) { - Library::instance()->setNowReading(current); - } -} - -void LibraryDialog::onDetails() -{ - onItemActivated(list->currentIndex()); -} - -#endif // Q_WS_MAEMO_5 - 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(); + int ret = (new InfoDialog(book, this))->exec(); + + switch (ret) { + case InfoDialog::Read: + Library::instance()->setNowReading(libraryIndex); + close(); + break; + case InfoDialog::Delete: + Library::instance()->remove(libraryIndex); + break; + default: + ; + } } -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++) { @@ -165,34 +137,17 @@ QString LibraryDialog::createItemText(const Book *book) return text; } -void LibraryDialog::onCurrentBookChanged() -{ - close(); -} - void LibraryDialog::setSelected(const QModelIndex &libraryIndex) { QModelIndex sortedIndex = sortedLibrary->mapFromSource(libraryIndex); - list->selectionModel()->clearSelection(); if (sortedIndex.isValid()) { - list->selectionModel()->select(sortedIndex, - QItemSelectionModel::Select); - list->setCurrentIndex(sortedIndex); + setCurrentItem(sortedIndex); } } -QModelIndex LibraryDialog::selected() const -{ - QModelIndexList selectedItems = list->selectionModel()->selectedIndexes(); - if (selectedItems.size()) { - return sortedLibrary->mapToSource(selectedItems[0]); - } - return QModelIndex(); -} - void LibraryDialog::onAddFolder() { - Trace t("LibraryDialog::onAddFolder"); + TRACE; // Get folder name Settings *settings = Settings::instance(); @@ -232,11 +187,7 @@ void LibraryDialog::onAddFromFolderDone(int added) progress->reset(); qDebug() << "LibraryDialog::onRefreshDone:" << msg; -#ifdef Q_WS_MAEMO_5 - QMaemo5InformationBox::information(this, msg); -#else - QMessageBox::information(this, tr("Done adding books"), msg); -#endif + Platform::instance()->information(msg, this); } void LibraryDialog::onAddFromFolder(const QString &path) @@ -247,7 +198,9 @@ void LibraryDialog::onAddFromFolder(const QString &path) void LibraryDialog::onSearch() { + TRACE; int ret = searchDialog->exec(); + qDebug() << "Search dialog returned" << ret; if (ret != QDialog::Accepted) { return; } @@ -260,7 +213,7 @@ void LibraryDialog::showSearchResults() { progress->reset(); QList results = Search::instance()->results(); - if (results.count() == 0) { + if (results.isEmpty()) { QMessageBox::information(this, tr("Search results"), tr("No books found")); return; @@ -271,3 +224,21 @@ void LibraryDialog::showSearchResults() 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); +}