#include "book.h"
#include "infodialog.h"
#include "settings.h"
+#include "listwindow.h"
+#include "foldersdialog.h"
-LibraryDialog::LibraryDialog(QWidget *parent):
- QDialog(parent, Qt::Dialog | Qt::WindowTitleHint |
- Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint)
+LibraryDialog::LibraryDialog(QWidget *parent): ListWindow(parent)
{
setWindowTitle(tr("Library"));
+
+ // Create and add list view
+
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
+ list->setSpacing(1);
+ Library *library = Library::instance();
+ QModelIndex current = library->nowReading();
+ setSelected(current);
+ addList(list);
- 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);
-
- horizontalLayout->addWidget(buttonBox);
+ addAction(tr("Add book"), this, SLOT(onAdd()));
+ addAction(tr("Manage folders"), this, SLOT(onShowFolders()));
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()
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"),
(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);
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);
}
}
void LibraryDialog::onDetails()
{
-#if 0 // FIXME
- onItemActivated(list->selectedItems()[0]);
-#endif
+ onItemActivated(list->currentIndex());
}
#endif // Q_WS_MAEMO_5
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)
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::onShowFolders()
{
- close();
+ FoldersDialog *folders = new FoldersDialog(this);
+ folders->show();
}