From 8d4d0a144d00251a1405858623fdfb5a722fbe70 Mon Sep 17 00:00:00 2001 From: Akos Polster Date: Tue, 20 Jul 2010 12:13:56 +0200 Subject: [PATCH] More model fixes. --- library.cpp | 47 +++++++++++++++++++++++++---------------------- library.h | 4 ++-- librarydialog.cpp | 9 +++------ mainwindow.cpp | 11 +++-------- 4 files changed, 33 insertions(+), 38 deletions(-) diff --git a/library.cpp b/library.cpp index dadbbc4..a3bc5b5 100644 --- a/library.cpp +++ b/library.cpp @@ -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(); diff --git a/library.h b/library.h index 0f8f1e5..c4eb0f0 100644 --- 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 mBooks; - Book *mNowReading; + QModelIndex mNowReading; }; #endif // LIBRARY_H diff --git a/librarydialog.cpp b/librarydialog.cpp index 8a5cf74..ddc6ce4 100644 --- a/librarydialog.cpp +++ b/librarydialog.cpp @@ -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); diff --git a/mainwindow.cpp b/mainwindow.cpp index 56ef2e2..34d56b5 100755 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -154,14 +154,9 @@ void MainWindow::showFullScreen() void MainWindow::setCurrentBook(const QModelIndex ¤t) { 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, -- 1.7.9.5