X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=mainwindow.cpp;h=21194523b96fac76723ad0b37ab3dead38c5cbca;hb=74e2fba9252926d33bd5f37ec13c557af2ceca4d;hp=1b653f2ca14cdccd2f6f5a99c50de56172cb85cf;hpb=db4a0e708ce67c323f438bf773a6578099487430;p=dorian diff --git a/mainwindow.cpp b/mainwindow.cpp index 1b653f2..2119452 100755 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,14 +1,7 @@ #include -#include -#include -#include -#include -#include -#include -#include +#include #ifdef Q_WS_MAEMO_5 -# include # include # include # include @@ -34,24 +27,25 @@ #include "progress.h" #include "dyalog.h" #include "translucentbutton.h" +#include "platform.h" +#include "progressdialog.h" +#include "sortedlibrary.h" #ifdef DORIAN_TEST_MODEL # include "modeltest.h" #endif -const int PROGRESS_HEIGHT = 17; -static const char *DORIAN_VERSION = -#include "pkg/version.txt" -; - MainWindow::MainWindow(QWidget *parent): AdopterWindow(parent), view(0), preventBlankingTimer(-1) { - Trace t("MainWindow::MainWindow"); + TRACE; #ifdef Q_WS_MAEMO_5 setAttribute(Qt::WA_Maemo5StackedWindow, true); #endif + +#ifndef Q_OS_SYMBIAN setWindowTitle("Dorian"); +#endif // Central widget. Must be an intermediate, because the book view widget // can be re-parented later @@ -62,26 +56,23 @@ MainWindow::MainWindow(QWidget *parent): setCentralWidget(central); // Book view - view = new BookView(central); - view->show(); - layout->addWidget(view); - - // Progress - progress = new Progress(central); - - // Settings dialog - settings = new QDialog(this); + view = new BookView(this); // Tool bar actions +#ifdef Q_OS_SYMBIAN + fullScreenAction = addToolBarAction(this, SLOT(showBig()), + "view-fullscreen", tr("Full screen")); +#endif + chaptersAction = addToolBarAction(this, SLOT(showChapters()), - "chapters", tr("Chapters")); + "chapters", tr("Chapters"), true); bookmarksAction = addToolBarAction(this, SLOT(showBookmarks()), - "bookmarks", tr("Bookmarks")); + "bookmarks", tr("Bookmarks"), true); infoAction = addToolBarAction(this, SLOT(showInfo()), - "info", tr("Book info")); + "info", tr("Book info"), true); libraryAction = addToolBarAction(this, SLOT(showLibrary()), - "library", tr("Library")); + "library", tr("Library"), true); #ifdef Q_WS_MAEMO_5 settingsAction = menuBar()->addAction(tr("Settings")); @@ -98,148 +89,126 @@ MainWindow::MainWindow(QWidget *parent): addToolBarAction(this, SLOT(about()), "about", tr("About")); #endif // Q_WS_MAEMO_5 +#ifndef Q_OS_SYMBIAN addToolBarSpace(); fullScreenAction = addToolBarAction(this, SLOT(showBig()), "view-fullscreen", tr("Full screen")); +#else + (void)addToolBarAction(this, SLOT(close()), "", tr("Exit")); +#endif - // Buttons on top of the book view - previousButton = new TranslucentButton("back", this); - nextButton = new TranslucentButton("forward", this); + // Decorations + prev = new TranslucentButton("back", this); + next = new TranslucentButton("forward", this); + prog = new Progress(this); // Handle model changes connect(Library::instance(), SIGNAL(nowReadingChanged()), this, SLOT(onCurrentBookChanged())); // Load library, upgrade it if needed - upgradeProgress = new QProgressDialog(tr("Upgrading library"), "", 0, 0, this); - upgradeProgress->reset(); - upgradeProgress->setMinimumDuration(0); - upgradeProgress->setWindowModality(Qt::WindowModal); - upgradeProgress->setCancelButton(0); + libraryProgress = new ProgressDialog(tr("Upgrading library"), this); Library *library = Library::instance(); - connect(library, SIGNAL(beginUpgrade(int)), this, SLOT(onBeginUpgrade(int))); + connect(library, SIGNAL(beginUpgrade(int)), + this, SLOT(onBeginUpgrade(int))); connect(library, SIGNAL(upgrading(const QString &)), this, SLOT(onUpgrading(const QString &))); connect(library, SIGNAL(endUpgrade()), this, SLOT(onEndUpgrade())); - library->upgrade(); - library->load(); - - // Load book on command line, or load last read book, or load default book - if (QCoreApplication::arguments().size() == 2) { - QString path = QCoreApplication::arguments()[1]; - library->add(path); - QModelIndex index = library->find(path); - if (index.isValid()) { - library->setNowReading(index); - } - } else { - QModelIndex index = library->nowReading(); - if (index.isValid()) { - library->setNowReading(index); - } else { - if (!library->rowCount()) { - library->add(":/books/2BR02B.epub"); - } - library->setNowReading(library->index(0)); - } - } // Handle loading book parts connect(view, SIGNAL(partLoadStart(int)), this, SLOT(onPartLoadStart())); connect(view, SIGNAL(partLoadEnd(int)), this, SLOT(onPartLoadEnd(int))); // Handle progress - connect(view, SIGNAL(progress(qreal)), progress, SLOT(setProgress(qreal))); + connect(view, SIGNAL(progress(qreal)), prog, SLOT(setProgress(qreal))); // Shadow window for full screen reading fullScreenWindow = new FullScreenWindow(this); connect(fullScreenWindow, SIGNAL(restore()), this, SLOT(showRegular())); // Handle settings changes - Settings *settings = Settings::instance(); - connect(settings, SIGNAL(valueChanged(const QString &)), + connect(Settings::instance(), SIGNAL(valueChanged(const QString &)), this, SLOT(onSettingsChanged(const QString &))); - settings->setValue("orientation", settings->value("orientation")); - settings->setValue("lightson", settings->value("lightson")); - settings->setValue("usevolumekeys", settings->value("usevolumekeys")); // Handle book view buttons - connect(nextButton, SIGNAL(triggered()), this, SLOT(goToNextPage())); - connect(previousButton, SIGNAL(triggered()), this, SLOT(goToPreviousPage())); + connect(next, SIGNAL(triggered()), this, SLOT(goToNextPage())); + connect(prev, SIGNAL(triggered()), this, SLOT(goToPreviousPage())); #ifdef DORIAN_TEST_MODEL (void)new ModelTest(Library::instance(), this); #endif } -MainWindow::~MainWindow() +void MainWindow::initialize() { + TRACE; + Library *library = Library::instance(); + + // Upgrade library if needed, then load it + library->upgrade(); + library->load(); + + // Load book on command line, or load last read book, or load default book + if (QCoreApplication::arguments().size() == 2) { + QString path = QCoreApplication::arguments()[1]; + library->add(path); + QModelIndex index = library->find(path); + if (index.isValid()) { + library->setNowReading(index); + } + } else { + QModelIndex index = library->nowReading(); + if (index.isValid()) { + library->setNowReading(index); + } else { + if (!library->rowCount()) { + library->add(":/books/2BR02B.epub"); + } + SortedLibrary sorted; + library->setNowReading(sorted.mapToSource(sorted.index(0, 0))); + } + } + + // Show in regular (non full-screen) mode + showRegular(); } void MainWindow::onCurrentBookChanged() { + TRACE; setCurrentBook(Library::instance()->nowReading()); } void MainWindow::showRegular() { - Trace t("MainWindow::showRegular"); + TRACE; + + // Re-parent children + fullScreenWindow->leaveBookView(); + takeBookView(view, prog, prev, next); + fullScreenWindow->hide(); - fullScreenWindow->leaveChildren(); + show(); - QList otherChildren; - otherChildren << progress << previousButton << nextButton; - takeChildren(view, otherChildren); - QRect geo = geometry(); - progress->setGeometry(0, 0, geo.width(), PROGRESS_HEIGHT); -#if defined(Q_WS_MAEMO_5) - previousButton->setGeometry(0, - geo.height() - toolBar->height() - TranslucentButton::pixels, - TranslucentButton::pixels, TranslucentButton::pixels); - nextButton->setGeometry(geo.width() - TranslucentButton::pixels, 0, - TranslucentButton::pixels, TranslucentButton::pixels); -#elif defined(Q_OS_SYMBIAN) - previousButton->setGeometry(0, geo.height() - TranslucentButton::pixels, - TranslucentButton::pixels, TranslucentButton::pixels); - nextButton->setGeometry(geo.width() - TranslucentButton::pixels, - 0, TranslucentButton::pixels, TranslucentButton::pixels); -#else - previousButton->setGeometry(0, geo.height() - TranslucentButton::pixels, - TranslucentButton::pixels, TranslucentButton::pixels); - nextButton->setGeometry(geo.width() - TranslucentButton::pixels - 25, - toolBar->height(), TranslucentButton::pixels, TranslucentButton::pixels); -#endif // Q_WS_MAEMO_5 - qDebug() << "previousButton geometry" << previousButton->geometry(); - progress->flash(); - nextButton->show(); - previousButton->show(); - nextButton->flash(1500); - previousButton->flash(1500); +#if defined(Q_OS_SYMBIAN) + activateWindow(); +#endif } void MainWindow::showBig() { - Trace t("MainWindow::showBig"); - leaveChildren(); - QList otherChildren; - otherChildren << progress << nextButton << previousButton; - QRect screen = QApplication::desktop()->screenGeometry(); - progress->setGeometry(0, 0, screen.width(), PROGRESS_HEIGHT); -#if defined(Q_WS_MAEMO_5) - nextButton->setGeometry(screen.width() - TranslucentButton::pixels, 0, - TranslucentButton::pixels, TranslucentButton::pixels); -#else - nextButton->setGeometry(screen.width() - TranslucentButton::pixels - 25, 0, - TranslucentButton::pixels, TranslucentButton::pixels); -#endif // Q_WS_MAEMO_5 - previousButton->setGeometry(0, screen.height() - TranslucentButton::pixels, - TranslucentButton::pixels, TranslucentButton::pixels); + TRACE; + + // Re-parent children + leaveBookView(); + fullScreenWindow->takeBookView(view, prog, prev, next); - fullScreenWindow->takeChildren(view, otherChildren); fullScreenWindow->showFullScreen(); - progress->flash(); - nextButton->flash(1500); - previousButton->flash(1500); + hide(); + +#ifdef Q_OS_SYMBIAN + fullScreenWindow->activateWindow(); +#endif } void MainWindow::setCurrentBook(const QModelIndex ¤t) @@ -278,46 +247,42 @@ void MainWindow::showBookmarks() Book *book = Library::instance()->book(mCurrent); if (book) { BookmarksDialog *bookmarks = new BookmarksDialog(book, this); - bookmarks->setWindowModality(Qt::WindowModal); - connect(bookmarks, SIGNAL(addBookmark()), this, SLOT(onAddBookmark())); + connect(bookmarks, SIGNAL(addBookmark(const QString &)), + this, SLOT(onAddBookmark(const QString &))); connect(bookmarks, SIGNAL(goToBookmark(int)), this, SLOT(onGoToBookmark(int))); bookmarks->show(); } } -void MainWindow::closeEvent(QCloseEvent *event) -{ - Trace t("MainWindow::closeEvent"); - view->setLastBookmark(); - event->accept(); -} - void MainWindow::onSettingsChanged(const QString &key) { -#ifdef Q_WS_MAEMO_5 +#if defined(Q_WS_MAEMO_5) if (key == "orientation") { - QString value = Settings::instance()->value(key).toString(); + QString value = Settings::instance()->value(key, + Platform::instance()->defaultOrientation()).toString(); qDebug() << "MainWindow::onSettingsChanged: orientation" << value; if (value == "portrait") { setAttribute(Qt::WA_Maemo5LandscapeOrientation, false); setAttribute(Qt::WA_Maemo5PortraitOrientation, true); + fullScreenWindow->setAttribute(Qt::WA_Maemo5LandscapeOrientation, + false); + fullScreenWindow->setAttribute(Qt::WA_Maemo5PortraitOrientation, true); } else { setAttribute(Qt::WA_Maemo5PortraitOrientation, false); setAttribute(Qt::WA_Maemo5LandscapeOrientation, true); + fullScreenWindow->setAttribute(Qt::WA_Maemo5PortraitOrientation, + false); + fullScreenWindow->setAttribute(Qt::WA_Maemo5LandscapeOrientation, + true); } } else if (key == "lightson") { bool enable = Settings::instance()->value(key, false).toBool(); - qDebug() << "MainWindow::onSettingsChanged: lightson:" << enable; + qDebug() << "MainWindow::onSettingsChanged: lightson" << enable; killTimer(preventBlankingTimer); if (enable) { preventBlankingTimer = startTimer(29 * 1000); } - } else if (key == "usevolumekeys") { - bool value = Settings::instance()->value(key).toBool(); - qDebug() << "MainWindow::onSettingsChanged: usevolumekeys" << value; - grabZoomKeys(value); - fullScreenWindow->grabZoomKeys(value); } #else Q_UNUSED(key); @@ -326,15 +291,13 @@ void MainWindow::onSettingsChanged(const QString &key) void MainWindow::onPartLoadStart() { - Trace t("MainWindow::onPartLoadStart"); -#ifdef Q_WS_MAEMO_5 - setAttribute(Qt::WA_Maemo5ShowProgressIndicator, true); -#endif + TRACE; + Platform::instance()->showBusy(this, true); } void MainWindow::onPartLoadEnd(int index) { - Trace t("MainWindow::onPartLoadEnd"); + TRACE; bool enablePrevious = false; bool enableNext = false; Book *book = Library::instance()->book(mCurrent); @@ -346,20 +309,19 @@ void MainWindow::onPartLoadEnd(int index) enableNext = true; } } -#ifdef Q_WS_MAEMO_5 - setAttribute(Qt::WA_Maemo5ShowProgressIndicator, false); -#endif // Q_WS_MAEMO_5 + Platform::instance()->showBusy(this, false); } -void MainWindow::onAddBookmark() +void MainWindow::onAddBookmark(const QString ¬e) { - Trace t("MainWindow:onAddBookmark"); - view->addBookmark(); + TRACE; + view->addBookmark(note); + Platform::instance()->information(tr("Bookmarked current position"), this); } void MainWindow::onGoToBookmark(int index) { - Trace t("MainWindow::onGoToBookmark"); + TRACE; Book *book = Library::instance()->book(mCurrent); view->goToBookmark(book->bookmarks()[index]); } @@ -369,7 +331,6 @@ void MainWindow::showChapters() Book *book = Library::instance()->book(mCurrent); if (book) { ChaptersDialog *chapters = new ChaptersDialog(book, this); - chapters->setWindowModality(Qt::WindowModal); connect(chapters, SIGNAL(goToChapter(int)), this, SLOT(onGoToChapter(int))); chapters->show(); @@ -378,13 +339,14 @@ void MainWindow::showChapters() void MainWindow::onGoToChapter(int index) { - Trace t("MainWindow::onGoToChapter"); + TRACE; Book *book = Library::instance()->book(mCurrent); if (book) { - int partIndex = book->partFromChapter(index); + QString fragment; + int partIndex = book->partFromChapter(index, fragment); if (partIndex != -1) { - view->goToBookmark(Book::Bookmark(partIndex, 0)); + view->goToPart(partIndex, fragment); } } } @@ -399,39 +361,14 @@ void MainWindow::timerEvent(QTimerEvent *event) #endif // Q_WS_MAEMO_5 qDebug() << "MainWindow::timerEvent: Prevent display blanking"; } -} - -void MainWindow::resizeEvent(QResizeEvent *e) -{ - Trace t("MainWindow::resizeEvent"); - progress->setGeometry(QRect(0, 0, e->size().width(), PROGRESS_HEIGHT)); -#if defined(Q_WS_MAEMO_5) - previousButton->setGeometry(0, - e->size().height() - toolBar->height() - TranslucentButton::pixels, - TranslucentButton::pixels, TranslucentButton::pixels); - nextButton->setGeometry(e->size().width() - TranslucentButton::pixels, 0, - TranslucentButton::pixels, TranslucentButton::pixels); -#elif defined(Q_OS_SYMBIAN) - previousButton->setGeometry(0, e->size().height() - TranslucentButton::pixels, - TranslucentButton::pixels, TranslucentButton::pixels); - nextButton->setGeometry(e->size().width() - TranslucentButton::pixels, - 0, TranslucentButton::pixels, TranslucentButton::pixels); -#else - previousButton->setGeometry(0, e->size().height() - TranslucentButton::pixels, - TranslucentButton::pixels, TranslucentButton::pixels); - nextButton->setGeometry(e->size().width() - TranslucentButton::pixels - 25, - toolBar->height(), TranslucentButton::pixels, TranslucentButton::pixels); -#endif // Q_WS_MAEMO_5 - qDebug() << "previousButton geometry" << previousButton->geometry(); - previousButton->flash(1500); - nextButton->flash(1500); - QMainWindow::resizeEvent(e); + AdopterWindow::timerEvent(event); } void MainWindow::about() { - Dyalog *aboutDialog = new Dyalog(this); + Dyalog *aboutDialog = new Dyalog(this, false); aboutDialog->setWindowTitle(tr("About Dorian")); + QString version = Platform::instance()->version(); QLabel *label = new QLabel(aboutDialog); label->setTextFormat(Qt::RichText); label->setOpenExternalLinks(true); @@ -439,44 +376,63 @@ void MainWindow::about() label->setText(tr("Dorian %1

Copyright © 2010 " "Akos Polster <akos@pipacs.com>
" "Licensed under GNU General Public License, Version 3
" - "Source code: " - "garage.maemo.org/projects/dorian").arg(DORIAN_VERSION)); + "Source code:
" + "dorian.garage.maemo.org").arg(version)); aboutDialog->addWidget(label); aboutDialog->addStretch(); aboutDialog->show(); } - void MainWindow::goToNextPage() { - nextButton->flash(1500); - previousButton->flash(1500); + next->flash(); + prev->flash(); view->goNextPage(); } void MainWindow::goToPreviousPage() { - nextButton->flash(1500); - previousButton->flash(1500); + next->flash(); + prev->flash(); view->goPreviousPage(); } void MainWindow::onBeginUpgrade(int total) { - upgradeProgress->setVisible(total > 0); - upgradeProgress->setMaximum(total); + libraryProgress->setVisible(total > 0); + libraryProgress->setWindowTitle(tr("Upgrading library")); + libraryProgress->setMaximum(total); } void MainWindow::onUpgrading(const QString &path) { - upgradeProgress->setLabelText(tr("Upgrading %1"). + libraryProgress->setLabelText(tr("Upgrading %1"). arg(QFileInfo(path).fileName())); - upgradeProgress->setValue(upgradeProgress->value() + 1); + libraryProgress->setValue(libraryProgress->value() + 1); } void MainWindow::onEndUpgrade() { - upgradeProgress->hide(); - upgradeProgress->reset(); + libraryProgress->hide(); + libraryProgress->reset(); +} + +void MainWindow::onBeginLoad(int total) +{ + libraryProgress->setVisible(total > 0); + libraryProgress->setWindowTitle(tr("Loading library")); + libraryProgress->setMaximum(total); } +void MainWindow::onLoading(const QString &path) +{ + libraryProgress->setLabelText(tr("Loading %1"). + arg(QFileInfo(path).fileName())); + libraryProgress->setValue(libraryProgress->value() + 1); +} + +void MainWindow::onEndLoad() +{ + libraryProgress->hide(); + libraryProgress->reset(); +}