X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=mainwindow.cpp;h=31c952ce0195883a618b7b1f1ff108ed60b1382a;hb=f2571fe854dcae8a8cd8f9216e0f78b51dd0a1a4;hp=850c07055c44296e7b0a4e7f99b05429d46d8be2;hpb=2cd5dacabee31add2369542fc21f34a81dd50294;p=dorian diff --git a/mainwindow.cpp b/mainwindow.cpp index 850c070..31c952c 100755 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,12 +1,6 @@ #include -#include -#include -#include -#include -#include #ifdef Q_WS_MAEMO_5 -# include # include # include # include @@ -32,26 +26,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 @@ -78,6 +65,11 @@ MainWindow::MainWindow(QWidget *parent): // 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 +94,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 +110,21 @@ 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())); + 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())); + 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 +132,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)); } @@ -176,15 +183,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 +208,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 +283,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 +299,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,22 +309,21 @@ 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 +#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); } @@ -314,7 +347,7 @@ void MainWindow::onSettingsChanged(const QString &key) void MainWindow::onPartLoadStart() { - Trace t("MainWindow::onPartLoadStart"); + TRACE; #ifdef Q_WS_MAEMO_5 setAttribute(Qt::WA_Maemo5ShowProgressIndicator, true); #endif @@ -322,7 +355,7 @@ void MainWindow::onPartLoadStart() void MainWindow::onPartLoadEnd(int index) { - Trace t("MainWindow::onPartLoadEnd"); + TRACE; bool enablePrevious = false; bool enableNext = false; Book *book = Library::instance()->book(mCurrent); @@ -339,15 +372,16 @@ void MainWindow::onPartLoadEnd(int index) #endif // Q_WS_MAEMO_5 } -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 +400,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 +422,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 +443,86 @@ 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(); +} +