Improve bookmark management.
authorAkos Polster <polster@marzipan.pipacs.com>
Sun, 29 Aug 2010 10:05:16 +0000 (12:05 +0200)
committerAkos Polster <polster@marzipan.pipacs.com>
Sun, 29 Aug 2010 10:05:16 +0000 (12:05 +0200)
bookmarkinfodialog.cpp
bookmarksdialog.cpp
bookmarksdialog.h
model/library.cpp
model/library.h
pkg/changelog
widgets/listview.h
widgets/listwindow.cpp

index f78aa7b..cdc468a 100644 (file)
@@ -11,10 +11,15 @@ BookmarkInfoDialog::BookmarkInfoDialog(Book *b, int i, QWidget *parent):
     setWindowTitle(tr("Bookmark Details"));
 
     Book::Bookmark bookmark = book->bookmarks()[index];
-    QString contentId = book->parts[bookmark.part];
-    QString contentTitle = book->content[contentId].name;
-    QLabel *info = new QLabel(contentTitle + "\nAt " +
-        QString::number((int)(bookmark.pos*100)) + "%", this);
+    QString label("At ");
+    label += QString::number((int)(100 * book->
+        getProgress(bookmark.part, bookmark.pos))) + "%";
+    int chapterIndex = book->chapterFromPart(bookmark.part);
+    if (chapterIndex != -1) {
+        QString chapterId = book->chapters[chapterIndex];
+        label += ", in\n\"" + book->content[chapterId].name + "\"";
+    }
+    QLabel *info = new QLabel(label, this);
     addWidget(info);
     addStretch();
 
index 555b09f..9ae5666 100644 (file)
@@ -3,22 +3,24 @@
 #include "bookmarksdialog.h"
 #include "book.h"
 #include "bookmarkinfodialog.h"
+#include "listview.h"
 
 BookmarksDialog::BookmarksDialog(Book *book_, QWidget *parent):
-    QMainWindow(parent), book(book_)
+    ListWindow(parent), book(book_)
 {
-#ifdef Q_WS_MAEMO_5
-    setAttribute(Qt::WA_Maemo5StackedWindow, true);
-#endif
     setWindowTitle(tr("Bookmarks"));
+    if (!book) {
+        return;
+    }
 
-    QFrame *frame = new QFrame(this);
-    setCentralWidget(frame);
-    QHBoxLayout *horizontalLayout = new QHBoxLayout(frame);
-    frame->setLayout(horizontalLayout);
+    addAction(tr("Add bookmark"), this, SLOT(onAdd()));
+#ifndef Q_WS_MAEMO_5
+    addItemAction(tr("Go to"), this, SLOT(onGo()));
+    addItemAction(tr("Delete"), this, SLOT(onDelete()));
+#endif // ! Q_WS_MAEMO_5
 
-    list = new QListWidget(this);
-    list->setSelectionMode(QAbstractItemView::SingleSelection);
+    // Build bookmark list
+    // FIXME: Localize me
     foreach (Book::Bookmark bookmark, book_->bookmarks()) {
         QString label("At ");
         label += QString::number((int)(100 * book_->
@@ -28,50 +30,32 @@ BookmarksDialog::BookmarksDialog(Book *book_, QWidget *parent):
             QString chapterId = book_->chapters[chapterIndex];
             label += "\nIn \"" + book_->content[chapterId].name + "\"";
         }
-        (void)new QListWidgetItem(QIcon(":icons/bookmark.png"), label, list);
+        data.append(label);
     }
 
-    horizontalLayout->addWidget(list);
-
-#ifndef Q_WS_MAEMO_5
-    QDialogButtonBox *buttonBox = new QDialogButtonBox(Qt::Vertical);
-
-    QPushButton *goButton = new QPushButton(tr("Go to"), this);
-    buttonBox->addButton(goButton, QDialogButtonBox::ActionRole);
-    connect(goButton, SIGNAL(clicked()), this, SLOT(onGo()));
-
-    QPushButton *closeButton = buttonBox->addButton(QDialogButtonBox::Close);
-    connect(closeButton, SIGNAL(clicked()), this, SLOT(onClose()));
-
-    QPushButton *addButton = new QPushButton(tr("Add"), this);
-    buttonBox->addButton(addButton, QDialogButtonBox::ActionRole);
-    connect(addButton, SIGNAL(clicked()), this, SLOT(onAdd()));
-
-    QPushButton *deleteButton = new QPushButton(tr("Delete"), this);
-    buttonBox->addButton(deleteButton, QDialogButtonBox::DestructiveRole);
-    connect(deleteButton, SIGNAL(clicked()), this, SLOT(onDelete()));
-
-    horizontalLayout->addWidget(buttonBox);
-#else
-    QAction *addBookmarkAction = menuBar()->addAction(tr("Add bookmark"));
-    connect(addBookmarkAction, SIGNAL(triggered()), this, SLOT(onAdd()));
-#endif // Q_WS_MAEMO_5
-    connect(list, SIGNAL(itemActivated(QListWidgetItem *)),
-            this, SLOT(onItemActivated(QListWidgetItem *)));
+    // Create bookmark list view
+    QStringListModel *model = new QStringListModel(data, this);
+    list = new ListView;
+    list->setSelectionMode(QAbstractItemView::SingleSelection);
+    list->setModel(model);
+    addList(list);
+    connect(list, SIGNAL(activated(const QModelIndex &)),
+            this, SLOT(onItemActivated(const QModelIndex &)));
+    addList(list);
 }
 
 void BookmarksDialog::onGo()
 {
-    if (!list->selectedItems().isEmpty()) {
-        QListWidgetItem *item = list->selectedItems()[0];
-        emit goToBookmark(list->row(item));
+    QModelIndex current = list->currentIndex();
+    if (current.isValid()) {
+        emit goToBookmark(current.row());
         close();
     }
 }
 
-void BookmarksDialog::onItemActivated(QListWidgetItem *item)
+void BookmarksDialog::onItemActivated(const QModelIndex &index)
 {
-    switch ((new BookmarkInfoDialog(book, list->row(item), this))->exec()) {
+    switch ((new BookmarkInfoDialog(book, index.row(), this))->exec()) {
     case BookmarkInfoDialog::GoTo:
         onGo();
         break;
@@ -89,14 +73,10 @@ void BookmarksDialog::onAdd()
     close();
 }
 
-void BookmarksDialog::onClose()
-{
-    close();
-}
-
 void BookmarksDialog::onDelete(bool really)
 {
-    if (list->selectedItems().isEmpty()) {
+    QModelIndex current = list->currentIndex();
+    if (!current.isValid()) {
         return;
     }
     if (!really) {
@@ -107,16 +87,7 @@ void BookmarksDialog::onDelete(bool really)
             return;
         }
     }
-    QListWidgetItem *item = list->selectedItems()[0];
-    int row = list->row(item);
+    int row = current.row();
+    list->model()->removeRow(row);
     book->deleteBookmark(row);
-    delete item;
-}
-
-void BookmarksDialog::closeEvent(QCloseEvent *event)
-{
-#ifdef Q_WS_MAEMO_5
-    menuBar()->clear();
-#endif
-    event->accept();
 }
index 3194b9b..e623d32 100644 (file)
@@ -1,15 +1,16 @@
 #ifndef BOOKMARKSDIALOG_H
 #define BOOKMARKSDIALOG_H
 
-#include <QMainWindow>
+#include <QStringList>
+
+#include "listwindow.h"
 
 class QCloseEvent;
 class Book;
-class QListWidget;
-class QListWidgetItem;
+class ListView;
 
 /** Dialog box managing bookmarks. */
-class BookmarksDialog: public QMainWindow
+class BookmarksDialog: public ListWindow
 {
     Q_OBJECT
 
@@ -23,14 +24,13 @@ signals:
 public slots:
     void onGo();
     void onAdd();
-    void onItemActivated(QListWidgetItem *);
-    void onClose();
     void onDelete(bool really = false);
+    void onItemActivated(const QModelIndex &index);
 
 protected:
-    void closeEvent(QCloseEvent *e);
     Book *book;
-    QListWidget *list;
+    ListView *list;
+    QStringList data;
 };
 
 #endif // BOOKMARKSDIALOG_H
index 5c4a41e..f28181f 100644 (file)
@@ -85,7 +85,6 @@ void Library::load()
     }
     QString currentPath = settings.value("lib/nowreading").toString();
     mNowReading = find(currentPath);
-    mFolders = settings.value("lib/folders").toStringList();
 }
 
 void Library::save()
@@ -99,7 +98,6 @@ void Library::save()
     Book *currentBook = book(mNowReading);
     settings.setValue("lib/nowreading",
                       currentBook? currentBook->path(): QString());
-    settings.setValue("lib/folders", mFolders);
 }
 
 bool Library::add(const QString &path)
@@ -209,34 +207,3 @@ QStringList Library::bookPaths()
     }
     return ret;
 }
-
-QStringList Library::folders() const
-{
-    return mFolders;
-}
-
-bool Library::addFolder(const QString &folder)
-{
-    if (!mFolders.contains(folder)) {
-        mFolders.append(folder);
-        save();
-        return true;
-    } else {
-        return false;
-    }
-}
-
-bool Library::removeFolder(const QString &folder)
-{
-    if (mFolders.contains(folder)) {
-        mFolders.removeOne(folder);
-        save();
-        return true;
-    } else {
-        return false;
-    }
-}
-
-void Library::scanFolders()
-{
-}
index de8d84f..ab48f6d 100644 (file)
@@ -27,10 +27,6 @@ public:
     QModelIndex nowReading() const;
     Book *book(const QModelIndex &index);
     QStringList bookPaths();
-    QStringList folders() const;
-    bool addFolder(const QString &folder);
-    bool removeFolder(const QString &folder);
-    void scanFolders();
 
 signals:
     void nowReadingChanged();
@@ -49,7 +45,6 @@ private:
     static Library *mInstance;
     QList<Book *> mBooks;
     QModelIndex mNowReading;
-    QStringList mFolders;
 };
 
 #endif // LIBRARY_H
index 40fb3a8..45a20b9 100644 (file)
@@ -2,7 +2,8 @@ dorian (0.1.5-1) unstable; urgency=low
 
   * Show better bookmark descriptions
   * Fix part navigation on desktops
-  * Remove complicated folder management
+  * Improve folder management
+  * Improve bookmark management
 
  -- Akos Polster <akos@pipacs.com>  Sun, 22 Aug 2010 02:00:00 +0200
 
index 1812b95..4e78a7b 100644 (file)
@@ -10,6 +10,8 @@ public:
     explicit ListView(QWidget *parent = 0): QListView(parent) {
         setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
         setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+        setUniformItemSizes(true);
+        setEditTriggers(QAbstractItemView::NoEditTriggers);
     }
     int contentsHeight() const {return QListView::contentsSize().height() + 10;}
 };
index c15fa30..d1c48a5 100644 (file)
@@ -13,8 +13,8 @@ ListWindow::ListWindow(QWidget *parent): QMainWindow(parent), list(0)
     QScrollArea *scroller = new QScrollArea(this);
     setCentralWidget(scroller);
     scroller->setProperty("FingerScrollable", true);
-    scroller->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-    scroller->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+    // scroller->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+    // scroller->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
     scroller->setFrameStyle(QFrame::NoFrame);
     scroller->show();