More model fixes.
authorAkos Polster <polster@nolove.pipacs.com>
Tue, 20 Jul 2010 10:13:56 +0000 (12:13 +0200)
committerAkos Polster <polster@nolove.pipacs.com>
Tue, 20 Jul 2010 10:13:56 +0000 (12:13 +0200)
library.cpp
library.h
librarydialog.cpp
mainwindow.cpp

index dadbbc4..a3bc5b5 100644 (file)
@@ -7,7 +7,7 @@
 
 Library *Library::mInstance = 0;
 
-Library::Library(QObject *parent): QAbstractListModel(parent), mNowReading(0)
+Library::Library(QObject *parent): QAbstractListModel(parent)
 {
     load();
 }
@@ -50,13 +50,16 @@ QVariant Library::data(const QModelIndex &index, int role) const
 
 Book *Library::book(const QModelIndex &index)
 {
-    if (index.isValid() &&
-        (index.row() >= 0) &&
-        (index.row() < mBooks.size())) {
-        return mBooks[index.row()];
-    } else {
-        return 0;
+    if (index.isValid()) {
+        if ((index.row() >= 0) && (index.row() < mBooks.size())) {
+            qDebug() << "Library::book:" << index.row() << "is"
+                    << mBooks[index.row()]->name();
+            return mBooks[index.row()];
+        } else {
+            qWarning() << "*** Library::book: Bad index" << index.row();
+        }
     }
+    return 0;
 }
 
 void Library::close()
@@ -79,11 +82,7 @@ void Library::load()
         mBooks.append(book);
     }
     QString currentPath = settings.value("lib/nowreading").toString();
-    QModelIndex index = find(currentPath);
-    if (index.isValid()) {
-        mNowReading = mBooks[index.row()];
-        qDebug() << "Library::load: Now reading" << mNowReading->path();
-    }
+    mNowReading = find(currentPath);
 }
 
 void Library::save()
@@ -96,8 +95,9 @@ void Library::save()
         QString key = "lib/book" + QString::number(i);
         settings.setValue(key, mBooks[i]->path());
     }
+    Book *currentBook = book(mNowReading);
     settings.setValue("lib/nowreading",
-                      mNowReading? mNowReading->path(): QString());
+                      currentBook? currentBook->path(): QString());
 }
 
 bool Library::add(QString path)
@@ -131,8 +131,8 @@ void Library::remove(const QModelIndex &index)
     mBooks.removeAt(row);
     save();
     endRemoveRows();
-    if (toRemove == mNowReading) {
-        mNowReading = 0;
+    if (index == mNowReading) {
+        mNowReading = QModelIndex();
         emit nowReadingChanged();
     }
     delete toRemove;
@@ -140,12 +140,13 @@ void Library::remove(const QModelIndex &index)
 
 QModelIndex Library::nowReading() const
 {
-    return find(mNowReading);
+    qDebug() << "Library::nowReading" << mNowReading.row();
+    return mNowReading;
 }
 
-void Library::setNowReading(const QModelIndex index)
+void Library::setNowReading(const QModelIndex &index)
 {
-    mNowReading = book(index);
+    mNowReading = index;
     save();
     emit nowReadingChanged();
 }
@@ -156,7 +157,7 @@ void Library::clear()
         delete mBooks[i];
     }
     mBooks.clear();
-    mNowReading = 0;
+    mNowReading = QModelIndex();
 }
 
 QModelIndex Library::find(QString path) const
@@ -174,9 +175,11 @@ QModelIndex Library::find(QString path) const
 
 QModelIndex Library::find(const Book *book) const
 {
-    for (int i = 0; i < mBooks.size(); i++) {
-        if (book == mBooks[i]) {
-            return index(i);
+    if (book) {
+        for (int i = 0; i < mBooks.size(); i++) {
+            if (book == mBooks[i]) {
+                return index(i);
+            }
         }
     }
     return QModelIndex();
index 0f8f1e5..c4eb0f0 100644 (file)
--- a/library.h
+++ b/library.h
@@ -25,7 +25,7 @@ public:
     QModelIndex find(const Book *book) const;
     bool add(QString path);
     void remove(const QModelIndex &index);
-    void setNowReading(const QModelIndex index);
+    void setNowReading(const QModelIndex &index);
     QModelIndex nowReading() const;
     Book *book(const QModelIndex &index);
 
@@ -39,7 +39,7 @@ private:
     void clear();
     static Library *mInstance;
     QList<Book *> mBooks;
-    Book *mNowReading;
+    QModelIndex mNowReading;
 };
 
 #endif // LIBRARY_H
index 8a5cf74..ddc6ce4 100644 (file)
@@ -29,12 +29,9 @@ LibraryDialog::LibraryDialog(QWidget *parent):
     setSizeGripEnabled(true);
 #endif
 
-#if 0 // FIXME
-    Book *current = library->current();
-    if (library->size() && current) {
-        list->setItemSelected(list->item(library->find(current)), true);
-    }
-#endif
+    Library *library = Library::instance();
+    QModelIndex current = library->nowReading();
+    list->setCurrentIndex(current);
 
     QHBoxLayout *horizontalLayout = new QHBoxLayout(this);
     horizontalLayout->addWidget(list);
index 56ef2e2..34d56b5 100755 (executable)
@@ -154,14 +154,9 @@ void MainWindow::showFullScreen()
 void MainWindow::setCurrentBook(const QModelIndex &current)
 {
     mCurrent = current;
-    if (current.isValid()) {
-        Book *book = Library::instance()->book(current);
-        view->setBook(book);
-        setWindowTitle(book->name());
-    } else {
-        view->setBook(0);
-        setWindowTitle("Dorian");
-    }
+    Book *book = Library::instance()->book(current);
+    view->setBook(book);
+    setWindowTitle(book? book->name(): tr("Dorian"));
 }
 
 QAction *MainWindow::addToolBarAction(const QObject *receiver,