X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=bookmarksdialog.cpp;h=3f4bb8c41f11ee852069ed7e6c689229a7636363;hb=74e2fba9252926d33bd5f37ec13c557af2ceca4d;hp=14b3b3eab8500b2054815127162a1ccb62413984;hpb=41c0fdd2d68424ab3a97f8de0b861e37bb2ccd20;p=dorian diff --git a/bookmarksdialog.cpp b/bookmarksdialog.cpp index 14b3b3e..3f4bb8c 100644 --- a/bookmarksdialog.cpp +++ b/bookmarksdialog.cpp @@ -2,62 +2,93 @@ #include "bookmarksdialog.h" #include "book.h" +#include "bookmarkinfodialog.h" +#include "trace.h" BookmarksDialog::BookmarksDialog(Book *book_, QWidget *parent): - QDialog(parent, Qt::Dialog | Qt::WindowTitleHint | - Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint) + ListWindow(tr("(No bookmarks)\n"), parent), book(book_) { setWindowTitle(tr("Bookmarks")); -#ifndef Q_WS_MAEMO_5 - setSizeGripEnabled(true); -#endif + if (!book) { + return; + } - list = new QListWidget(this); - list->setSelectionMode(QAbstractItemView::SingleSelection); + // Build and set bookmark model + // FIXME: Localize me foreach (Book::Bookmark bookmark, book_->bookmarks()) { - QString contentId = book_->toc[bookmark.chapter]; - QString contentTitle = book_->content[contentId].name; - list->addItem(contentTitle + ", at " + - QString::number((int)(bookmark.pos * 100)) + "%"); + QString label("At "); + label += QString::number((int)(100 * book_-> + getProgress(bookmark.part, bookmark.pos))) + "%"; + if (!bookmark.note.isEmpty()) { + label += ": " + bookmark.note; + } + label += "\n"; + int chapterIndex = book_->chapterFromPart(bookmark.part); + if (chapterIndex != -1) { + QString chapterId = book_->chapters[chapterIndex]; + label += "In \"" + book_->content[chapterId].name + "\""; + } + data.append(label); } + QStringListModel *model = new QStringListModel(data, this); + setModel(model); + + addButton(tr("Add bookmark"), this, SLOT(onAdd()), "add"); + addItemButton(tr("Delete bookmark"), this, SLOT(onDelete()), "remove"); - QHBoxLayout *horizontalLayout = new QHBoxLayout(this); - horizontalLayout->addWidget(list); - - QDialogButtonBox *buttonBox = new QDialogButtonBox(Qt::Vertical); -#ifndef Q_WS_MAEMO_5 - QPushButton *goButton = new QPushButton(tr("Go"), this); - buttonBox->addButton(goButton, QDialogButtonBox::AcceptRole); - connect(goButton, SIGNAL(clicked()), this, SLOT(onGo())); -#endif - QPushButton *addButton = new QPushButton(tr("Add"), this); - buttonBox->addButton(addButton, QDialogButtonBox::ActionRole); - connect(addButton, SIGNAL(clicked()), this, SLOT(onAdd())); - - horizontalLayout->addWidget(buttonBox); - -#ifdef Q_WS_MAEMO_5 - connect(list, SIGNAL(itemActivated(QListWidgetItem *)), - this, SLOT(onItemActivated(QListWidgetItem *))); -#endif + connect(this, SIGNAL(activated(const QModelIndex &)), + this, SLOT(onItemActivated(const QModelIndex &))); } void BookmarksDialog::onGo() { - if (list->selectedItems().isEmpty()) { - return; + TRACE; + QModelIndex current = currentItem(); + if (current.isValid()) { + emit goToBookmark(current.row()); + close(); } - QListWidgetItem *item = list->selectedItems()[0]; - int index = list->row(item) + 1; - done(index); } -void BookmarksDialog::onItemActivated(QListWidgetItem *item) +void BookmarksDialog::onItemActivated(const QModelIndex &index) { - done(list->row(item) + 1); + switch ((new BookmarkInfoDialog(book, index.row(), this))->exec()) { + case BookmarkInfoDialog::GoTo: + onGo(); + break; + case BookmarkInfoDialog::Delete: + onDelete(true); + break; + default: + ; + } } void BookmarksDialog::onAdd() { - done(-1); + bool ok; + QString text = QInputDialog::getText(this, tr("Add bookmark"), + tr("Note (optional):"), QLineEdit::Normal, QString(), &ok); + if (ok) { + emit addBookmark(text); + close(); + } +} + +void BookmarksDialog::onDelete(bool really) +{ + QModelIndex current = currentItem(); + if (!current.isValid()) { + return; + } + if (!really) { + if (QMessageBox::Yes != + QMessageBox::question(this, tr("Delete bookmark"), + tr("Delete bookmark?"), QMessageBox::Yes | QMessageBox::No)) { + return; + } + } + int row = current.row(); + model()->removeRow(row); + book->deleteBookmark(row); }