X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=mainwindow.cpp;h=72f14ef2954224deeebecdb18c6d1c39ccdb4d5b;hb=5cad671b0742ca2b922edcb5e7a77f8816e59269;hp=850c07055c44296e7b0a4e7f99b05429d46d8be2;hpb=2cd5dacabee31add2369542fc21f34a81dd50294;p=dorian diff --git a/mainwindow.cpp b/mainwindow.cpp index 850c070..72f14ef 100755 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,12 +1,7 @@ #include -#include -#include -#include -#include -#include +#include #ifdef Q_WS_MAEMO_5 -# include # include # include # include @@ -32,26 +27,19 @@ #include "progress.h" #include "dyalog.h" #include "translucentbutton.h" +#include "platform.h" +#include "progressdialog.h" #ifdef DORIAN_TEST_MODEL # include "modeltest.h" #endif -#ifdef Q_WS_MAC -# define ICON_PREFIX ":/icons/mac/" -#else -# define ICON_PREFIX ":/icons/" -#endif - -const int PROGRESS_HEIGHT = 17; -static const char *DORIAN_VERSION = -#include "pkg/version.txt" -; +const int DORIAN_PROGRESS_HEIGHT = 17; 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 @@ -71,13 +59,18 @@ MainWindow::MainWindow(QWidget *parent): layout->addWidget(view); // Progress - progress = new Progress(central); + progress = new Progress(this); // Settings dialog settings = new QDialog(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")); bookmarksAction = addToolBarAction(this, SLOT(showBookmarks()), @@ -102,9 +95,13 @@ 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); @@ -114,8 +111,23 @@ MainWindow::MainWindow(QWidget *parent): connect(Library::instance(), SIGNAL(nowReadingChanged()), this, SLOT(onCurrentBookChanged())); - // Load book on command line, or load last read book, or load default book + // Load library, upgrade it if needed + libraryProgress = new ProgressDialog(tr("Upgrading library"), this); Library *library = Library::instance(); + 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())); +#ifndef Q_OS_SYMBIAN + connect(library, SIGNAL(beginLoad(int)), this, SLOT(onBeginLoad(int))); + connect(library, SIGNAL(loading(const QString &)), + this, SLOT(onLoading(const QString &))); + connect(library, SIGNAL(endLoad()), this, SLOT(onEndLoad())); +#endif + 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); @@ -123,15 +135,13 @@ MainWindow::MainWindow(QWidget *parent): if (index.isValid()) { library->setNowReading(index); } - } - else { + } else { QModelIndex index = library->nowReading(); if (index.isValid()) { library->setNowReading(index); - } - else { + } else { if (!library->rowCount()) { - library->add(":/books/2 B R 0 2 B.epub"); + library->add(":/books/2BR02B.epub"); } library->setNowReading(library->index(0)); } @@ -154,21 +164,19 @@ MainWindow::MainWindow(QWidget *parent): 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())); + // Adopt view, show window + showRegular(); + #ifdef DORIAN_TEST_MODEL (void)new ModelTest(Library::instance(), this); #endif } -MainWindow::~MainWindow() -{ -} - void MainWindow::onCurrentBookChanged() { setCurrentBook(Library::instance()->nowReading()); @@ -176,15 +184,17 @@ void MainWindow::onCurrentBookChanged() void MainWindow::showRegular() { - Trace t("MainWindow::showRegular"); - fullScreenWindow->hide(); - fullScreenWindow->leaveChildren(); + TRACE; + // Re-parent children + fullScreenWindow->leaveChildren(); QList otherChildren; otherChildren << progress << previousButton << nextButton; takeChildren(view, otherChildren); + + // Adjust geometry of decorations QRect geo = geometry(); - progress->setGeometry(0, 0, geo.width(), PROGRESS_HEIGHT); + progress->setGeometry(0, 0, geo.width(), DORIAN_PROGRESS_HEIGHT); #if defined(Q_WS_MAEMO_5) previousButton->setGeometry(0, geo.height() - toolBar->height() - TranslucentButton::pixels, @@ -199,35 +209,58 @@ void MainWindow::showRegular() #else previousButton->setGeometry(0, geo.height() - TranslucentButton::pixels, TranslucentButton::pixels, TranslucentButton::pixels); - nextButton->setGeometry(geo.width() - TranslucentButton::pixels, - toolBar->height(), 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(); + + fullScreenWindow->hide(); + show(); +#if defined(Q_OS_SYMBIAN) + activateWindow(); +#elif defined(Q_WS_MAEMO_5) + // FIXME: This is ugly. + view->restoreLastBookmark(); +#endif progress->flash(); - nextButton->show(); - previousButton->show(); - nextButton->flash(1500); - previousButton->flash(1500); + nextButton->flash(); + previousButton->flash(); } void MainWindow::showBig() { - Trace t("MainWindow::showBig"); + TRACE; + + // Re-parent children leaveChildren(); QList otherChildren; otherChildren << progress << nextButton << previousButton; + fullScreenWindow->takeChildren(view, otherChildren); + + // Adjust geometry of decorations QRect screen = QApplication::desktop()->screenGeometry(); - progress->setGeometry(0, 0, screen.width(), PROGRESS_HEIGHT); + progress->setGeometry(0, 0, screen.width(), DORIAN_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); - fullScreenWindow->takeChildren(view, otherChildren); +#ifdef Q_OS_SYMBIAN + hide(); +#endif fullScreenWindow->showFullScreen(); +#ifdef Q_OS_SYMBIAN + fullScreenWindow->activateWindow(); +#endif progress->flash(); - nextButton->flash(1500); - previousButton->flash(1500); + nextButton->flash(); + previousButton->flash(); } void MainWindow::setCurrentBook(const QModelIndex ¤t) @@ -251,7 +284,8 @@ void MainWindow::showSettings() void MainWindow::showInfo() { if (mCurrent.isValid()) { - (new InfoDialog(Library::instance()->book(mCurrent), this, false))->exec(); + (new InfoDialog(Library::instance()->book(mCurrent), this, false))-> + exec(); } } @@ -266,7 +300,8 @@ void MainWindow::showBookmarks() 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(); @@ -275,54 +310,44 @@ void MainWindow::showBookmarks() void MainWindow::closeEvent(QCloseEvent *event) { - Trace t("MainWindow::closeEvent"); + TRACE; view->setLastBookmark(); event->accept(); } void MainWindow::onSettingsChanged(const QString &key) { -#ifdef Q_WS_MAEMO_5 + TRACE; + qDebug() << key; +#if defined(Q_WS_MAEMO_5) if (key == "orientation") { QString value = Settings::instance()->value(key).toString(); - qDebug() << "MainWindow::onSettingsChanged: orientation" << value; if (value == "portrait") { setAttribute(Qt::WA_Maemo5LandscapeOrientation, false); setAttribute(Qt::WA_Maemo5PortraitOrientation, true); - } - else { + } else { setAttribute(Qt::WA_Maemo5PortraitOrientation, false); setAttribute(Qt::WA_Maemo5LandscapeOrientation, true); } } else if (key == "lightson") { bool enable = Settings::instance()->value(key, false).toBool(); - 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); #endif // Q_WS_MAEMO_5 } void MainWindow::onPartLoadStart() { - Trace t("MainWindow::onPartLoadStart"); -#ifdef Q_WS_MAEMO_5 - setAttribute(Qt::WA_Maemo5ShowProgressIndicator, true); -#endif + TRACE; + Platform::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); @@ -334,20 +359,19 @@ void MainWindow::onPartLoadEnd(int index) enableNext = true; } } -#ifdef Q_WS_MAEMO_5 - setAttribute(Qt::WA_Maemo5ShowProgressIndicator, false); -#endif // Q_WS_MAEMO_5 + Platform::showBusy(this, false); } -void MainWindow::onAddBookmark() +void MainWindow::onAddBookmark(const QString ¬e) { - Trace t("MainWindow:onAddBookmark"); - view->addBookmark(); + TRACE; + view->addBookmark(note); + Platform::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]); } @@ -366,13 +390,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); } } } @@ -387,12 +412,13 @@ void MainWindow::timerEvent(QTimerEvent *event) #endif // Q_WS_MAEMO_5 qDebug() << "MainWindow::timerEvent: Prevent display blanking"; } + AdopterWindow::timerEvent(event); } void MainWindow::resizeEvent(QResizeEvent *e) { - Trace t("MainWindow::resizeEvent"); - progress->setGeometry(QRect(0, 0, e->size().width(), PROGRESS_HEIGHT)); + TRACE; + progress->setGeometry(QRect(0, 0, e->size().width(), DORIAN_PROGRESS_HEIGHT)); #if defined(Q_WS_MAEMO_5) previousButton->setGeometry(0, e->size().height() - toolBar->height() - TranslucentButton::pixels, @@ -407,42 +433,83 @@ void MainWindow::resizeEvent(QResizeEvent *e) #else previousButton->setGeometry(0, e->size().height() - TranslucentButton::pixels, TranslucentButton::pixels, TranslucentButton::pixels); - nextButton->setGeometry(e->size().width() - 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); + previousButton->flash(); + nextButton->flash(); QMainWindow::resizeEvent(e); } void MainWindow::about() { - Dyalog *aboutDialog = new Dyalog(this); + Dyalog *aboutDialog = new Dyalog(this, false); aboutDialog->setWindowTitle(tr("About Dorian")); QLabel *label = new QLabel(aboutDialog); label->setTextFormat(Qt::RichText); label->setOpenExternalLinks(true); + label->setWordWrap(true); 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:
" + "garage.maemo.org/projects/dorian").arg(Platform::version())); aboutDialog->addWidget(label); + aboutDialog->addStretch(); aboutDialog->show(); } - void MainWindow::goToNextPage() { - nextButton->flash(1500); - previousButton->flash(1500); + nextButton->flash(); + previousButton->flash(); view->goNextPage(); } void MainWindow::goToPreviousPage() { - nextButton->flash(1500); - previousButton->flash(1500); + nextButton->flash(); + previousButton->flash(); view->goPreviousPage(); } + +void MainWindow::onBeginUpgrade(int total) +{ + libraryProgress->setVisible(total > 0); + libraryProgress->setWindowTitle(tr("Upgrading library")); + libraryProgress->setMaximum(total); +} + +void MainWindow::onUpgrading(const QString &path) +{ + libraryProgress->setLabelText(tr("Upgrading %1"). + arg(QFileInfo(path).fileName())); + libraryProgress->setValue(libraryProgress->value() + 1); +} + +void MainWindow::onEndUpgrade() +{ + 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(); +}