X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=librarydialog.cpp;h=767667ae3d0f8d8588f13d55f47f22ae20e30f70;hb=29dab253ded4ee3f92e95b54209ccb21f1e86004;hp=8a5cf74b19e4bd22a13b015f00618113f71567e1;hpb=8a2a28086afde732a56a9f78abc77086401db331;p=dorian diff --git a/librarydialog.cpp b/librarydialog.cpp index 8a5cf74..767667a 100644 --- a/librarydialog.cpp +++ b/librarydialog.cpp @@ -14,66 +14,52 @@ #include "book.h" #include "infodialog.h" #include "settings.h" +#include "listwindow.h" +#include "listview.h" +#include "trace.h" +#include "bookfinder.h" -LibraryDialog::LibraryDialog(QWidget *parent): - QDialog(parent, Qt::Dialog | Qt::WindowTitleHint | - Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint) +LibraryDialog::LibraryDialog(QWidget *parent): ListWindow(parent) { setWindowTitle(tr("Library")); - list = new QListView(this); - sortedLibrary = new SortedLibrary(this); - list->setModel(sortedLibrary); - list->setSelectionMode(QAbstractItemView::SingleSelection); - list->setUniformItemSizes(true); -#ifndef Q_WS_MAEMO_5 - setSizeGripEnabled(true); -#endif - -#if 0 // FIXME - Book *current = library->current(); - if (library->size() && current) { - list->setItemSelected(list->item(library->find(current)), true); - } -#endif - QHBoxLayout *horizontalLayout = new QHBoxLayout(this); - horizontalLayout->addWidget(list); + // Add actions - QDialogButtonBox *buttonBox = new QDialogButtonBox(Qt::Vertical); #ifndef Q_WS_MAEMO_5 - detailsButton = new QPushButton(tr("Details"), this); - readButton = new QPushButton(tr("Read"), this); - removeButton = new QPushButton(tr("Delete"), this); -#endif - addButton = new QPushButton(tr("Add"), this); + addItemAction(tr("Details"), this, SLOT(onDetails())); + addItemAction(tr("Read"), this, SLOT(onRead())); + addItemAction(tr("Delete"), this, SLOT(onRemove())); +#endif // ! Q_WS_MAEMO_5 -#ifndef Q_WS_MAEMO_5 - buttonBox->addButton(detailsButton, QDialogButtonBox::ActionRole); - buttonBox->addButton(readButton, QDialogButtonBox::AcceptRole); - buttonBox->addButton(removeButton, QDialogButtonBox::ActionRole); -#endif // Q_WS_MAEMO_5 - buttonBox->addButton(addButton, QDialogButtonBox::ActionRole); + addAction(tr("Add book"), this, SLOT(onAdd()), ":/icons/add.png"); + addAction(tr("Add books from folder"), this, SLOT(onAddFolder()), + ":/icons/folder.png"); - horizontalLayout->addWidget(buttonBox); + // Create and add list view + list = new ListView(this); + sortedLibrary = new SortedLibrary(this); + list->setModel(sortedLibrary); + list->setSelectionMode(QAbstractItemView::SingleSelection); + list->setSpacing(1); + Library *library = Library::instance(); + QModelIndex current = library->nowReading(); + setSelected(current); + addList(list); + + progress = new QProgressDialog(tr("Adding books"), "", 0, 0, this); + progress->reset(); + progress->setMinimumDuration(0); + progress->setWindowModality(Qt::WindowModal); + progress->setCancelButton(0); connect(Library::instance(), SIGNAL(nowReadingChanged()), this, SLOT(onCurrentBookChanged())); -#ifndef Q_WS_MAEMO_5 - connect(list, SIGNAL(itemSelectionChanged()), - this, SLOT(onItemSelectionChanged())); - connect(detailsButton, SIGNAL(clicked()), this, SLOT(onDetails())); - connect(readButton, SIGNAL(clicked()), this, SLOT(onRead())); - connect(removeButton, SIGNAL(clicked()), this, SLOT(onRemove())); -#endif - connect(addButton, SIGNAL(clicked()), this, SLOT(onAdd())); -#ifdef Q_WS_MAEMO_5 - connect(list, SIGNAL(itemActivated(QListWidgetItem *)), - this, SLOT(onItemActivated(QListWidgetItem *))); -#endif - -#ifndef Q_WS_MAEMO_5 - onItemSelectionChanged(); -#endif + connect(Library::instance(), + SIGNAL(rowsInserted(const QModelIndex &, int, int)), + this, + SLOT(onBookAdded())); + connect(list, SIGNAL(activated(const QModelIndex &)), + this, SLOT(onItemActivated(const QModelIndex &))); } void LibraryDialog::onAdd() @@ -97,7 +83,8 @@ void LibraryDialog::onAdd() Settings::instance()->setValue("lastdir", QFileInfo(path).absolutePath()); // Add book to library - if (library->find(path).isValid()) { + QModelIndex index = library->find(path); + if (index.isValid()) { #ifdef Q_WS_MAEMO_5 QMaemo5InformationBox::information(this, tr("This book is already in the library"), @@ -106,7 +93,7 @@ void LibraryDialog::onAdd() (void)QMessageBox::information(this, tr("Dorian"), tr("This book is already in the library"), QMessageBox::Ok); #endif // Q_WS_MAEMO_5 - // FIXME: Select existing book + setSelected(index); } else { library->add(path); @@ -115,34 +102,23 @@ void LibraryDialog::onAdd() void LibraryDialog::onBookAdded() { -#if 0 Library *library = Library::instance(); - int index = library->size() - 1; - Book *book = library->at(index); - QListWidgetItem *item = new QListWidgetItem(book->cover, - createItemText(book)); - list->addItem(item); - list->setCurrentItem(item); -#endif + setSelected(library->index(library->rowCount() - 1)); } #ifndef Q_WS_MAEMO_5 void LibraryDialog::onRemove() { - qDebug() << "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, "Delete book", - "Delete book \"" + title + "\"?", - QMessageBox::Yes -#ifndef Q_WS_MAEMO_5 - , QMessageBox::No -#endif - )) { + QMessageBox::question(this, tr("Delete book"), + tr("Delete book \"%1\" from library?"). + arg(currentBook->shortName()), + QMessageBox::Yes | QMessageBox::No)) { Library::instance()->remove(current); } } @@ -159,9 +135,7 @@ void LibraryDialog::onRead() void LibraryDialog::onDetails() { -#if 0 // FIXME - onItemActivated(list->selectedItems()[0]); -#endif + onItemActivated(list->currentIndex()); } #endif // Q_WS_MAEMO_5 @@ -169,12 +143,9 @@ void LibraryDialog::onDetails() void LibraryDialog::onItemActivated(const QModelIndex &index) { qDebug() << "LibraryDialog::onItemActivated"; -#if 0 // FIXME - int row = list->row(item); - Book *book = Library::instance()->at(row); - InfoDialog *info = new InfoDialog(book, this); - info->exec(); -#endif + QModelIndex libraryIndex = sortedLibrary->mapToSource(index); + Book *book = Library::instance()->book(libraryIndex); + (new InfoDialog(book, this))->exec(); } QString LibraryDialog::createItemText(const Book *book) @@ -189,25 +160,82 @@ QString LibraryDialog::createItemText(const Book *book) return text; } -#ifndef Q_WS_MAEMO_5 +void LibraryDialog::onCurrentBookChanged() +{ + close(); +} -void LibraryDialog::onItemSelectionChanged() +void LibraryDialog::setSelected(const QModelIndex &libraryIndex) { -#if 0 // FIXME - bool enable = list->selectedItems().size(); - qDebug() << "LibraryDialog::onItemSelectionChanged" << enable; - readButton->setEnabled(enable); - qDebug() << " readButton"; - detailsButton->setEnabled(enable); - qDebug() << " detailsButton"; - removeButton->setEnabled(enable); - qDebug() << " removeButton"; -#endif + QModelIndex sortedIndex = sortedLibrary->mapFromSource(libraryIndex); + list->selectionModel()->clearSelection(); + if (sortedIndex.isValid()) { + list->selectionModel()->select(sortedIndex, + QItemSelectionModel::Select); + list->setCurrentIndex(sortedIndex); + } } -#endif // Q_WS_MAEMO_5 +QModelIndex LibraryDialog::selected() const +{ + QModelIndexList selectedItems = list->selectionModel()->selectedIndexes(); + if (selectedItems.size()) { + return sortedLibrary->mapToSource(selectedItems[0]); + } + return QModelIndex(); +} -void LibraryDialog::onCurrentBookChanged() +void LibraryDialog::onAddFolder() { - close(); + Trace t("LibraryDialog::onAddFolder"); + + // Get folder name + Settings *settings = Settings::instance(); + QString last = + settings->value("lastfolderadded", QDir::homePath()).toString(); + QString path = + QFileDialog::getExistingDirectory(this, tr("Select folder"), last); + if (path == "") { + return; + } + settings->setValue("lastfolderadded", QFileInfo(path).absolutePath()); + qDebug() << path; + + // Add books from folder + progress->setWindowTitle(tr("Adding books")); + BookFinder *bookFinder = new BookFinder(this); + Library *library = Library::instance(); + connect(bookFinder, SIGNAL(begin(int)), progress, SLOT(setMaximum(int))); + connect(bookFinder, SIGNAL(add(const QString &)), + this, SLOT(onAddFromFolder(const QString &))); + connect(bookFinder, SIGNAL(add(const QString &)), + library, SLOT(add(const QString &))); + connect(bookFinder, SIGNAL(done(int)), + this, SLOT(onAddFromFolderDone(int))); + bookFinder->find(path, Library::instance()->bookPaths()); +} + +void LibraryDialog::onAddFromFolderDone(int added) +{ + QString msg; + + 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); + } + + progress->reset(); + qDebug() << "LibraryDialog::onRefreshDone:" << msg; +#ifdef Q_WS_MAEMO_5 + QMaemo5InformationBox::information(this, msg); +#else + // FIXME +#endif +} + +void LibraryDialog::onAddFromFolder(const QString &path) +{ + progress->setLabelText(QFileInfo(path).fileName()); + progress->setValue(progress->value() + 1); }