X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=mainwindow.cpp;h=8694cd24ebce2cad3f28cbf1e10a4a8f6a7652cb;hb=HEAD;hp=9d047a915e9e62dac088d40f557c11124942697d;hpb=b28659ebcbbcd4c42d90e0439fc09e03fc5a47cc;p=dorian diff --git a/mainwindow.cpp b/mainwindow.cpp index 9d047a9..8694cd2 100755 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -42,10 +42,9 @@ MainWindow::MainWindow(QWidget *parent): #ifdef Q_WS_MAEMO_5 setAttribute(Qt::WA_Maemo5StackedWindow, true); #endif - setWindowTitle("Dorian"); // Central widget. Must be an intermediate, because the book view widget - // can be re-parented later + // might be re-parented later QFrame *central = new QFrame(this); QVBoxLayout *layout = new QVBoxLayout(central); layout->setMargin(0); @@ -53,55 +52,50 @@ MainWindow::MainWindow(QWidget *parent): setCentralWidget(central); // Book view - view = new BookView(central); - view->show(); - layout->addWidget(view); - - // Dialogs - progress = new Progress(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"), true); bookmarksAction = addToolBarAction(this, SLOT(showBookmarks()), "bookmarks", tr("Bookmarks"), true); - infoAction = addToolBarAction(this, SLOT(showInfo()), - "info", tr("Book info"), true); libraryAction = addToolBarAction(this, SLOT(showLibrary()), - "library", tr("Library"), true); + "library", tr("Library"), false); #ifdef Q_WS_MAEMO_5 settingsAction = menuBar()->addAction(tr("Settings")); connect(settingsAction, SIGNAL(triggered()), this, SLOT(showSettings())); devToolsAction = menuBar()->addAction(tr("Developer")); connect(devToolsAction, SIGNAL(triggered()), this, SLOT(showDevTools())); - QAction *aboutAction = menuBar()->addAction(tr("About")); - connect(aboutAction, SIGNAL(triggered()), this, SLOT(about())); #else settingsAction = addToolBarAction(this, SLOT(showSettings()), "preferences-system", tr("Settings")); devToolsAction = addToolBarAction(this, SLOT(showDevTools()), "developer", tr("Developer")); - addToolBarAction(this, SLOT(about()), "about", tr("About")); -#endif // Q_WS_MAEMO_5 +#endif -#ifndef Q_OS_SYMBIAN + rotateAction = addToolBarAction(this, SLOT(rotate()), + "rotate", tr("Rotate"), true); addToolBarSpace(); fullScreenAction = addToolBarAction(this, SLOT(showBig()), - "view-fullscreen", tr("Full screen")); + "view-fullscreen", tr("Full screen"), true); + +#if defined(Q_WS_MAEMO_5) + QAction *aboutAction = menuBar()->addAction(tr("About")); + connect(aboutAction, SIGNAL(triggered()), this, SLOT(about())); #else - (void)addToolBarAction(this, SLOT(close()), "", tr("Exit")); -#endif + addToolBarAction(this, SLOT(about()), "about", tr("About")); +#endif // defined(Q_WS_MAEMO_5) + +#if defined(Q_OS_SYMBIAN) + (void)addToolBarAction(this, SLOT(close()), "", tr("Exit"), false); +#endif // defined(Q_OS_SYMBIAN) - // 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()), @@ -110,7 +104,8 @@ MainWindow::MainWindow(QWidget *parent): // 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(beginUpgrade(int)), + this, SLOT(onBeginUpgrade(int))); connect(library, SIGNAL(upgrading(const QString &)), this, SLOT(onUpgrading(const QString &))); connect(library, SIGNAL(endUpgrade()), this, SLOT(onEndUpgrade())); @@ -120,10 +115,10 @@ MainWindow::MainWindow(QWidget *parent): 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); + fullScreenWindow = new FullScreenWindow(); connect(fullScreenWindow, SIGNAL(restore()), this, SLOT(showRegular())); // Handle settings changes @@ -131,22 +126,27 @@ MainWindow::MainWindow(QWidget *parent): this, SLOT(onSettingsChanged(const QString &))); // Handle book view buttons - connect(nextButton, SIGNAL(triggered()), this, SLOT(goToNextPage())); - connect(previousButton, SIGNAL(triggered()), this, SLOT(goToPreviousPage())); - - // Adopt view, show window - showRegular(); + 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() +{ + delete fullScreenWindow; +} + void MainWindow::initialize() { TRACE; Library *library = Library::instance(); + // Show in regular (non full-screen) mode + showRegular(); + // Upgrade library if needed, then load it library->upgrade(); library->load(); @@ -183,85 +183,30 @@ void MainWindow::showRegular() { TRACE; - // Re-parent children - fullScreenWindow->leaveChildren(); - QList otherChildren; - otherChildren << progress << previousButton << nextButton; - takeChildren(view, otherChildren); - - // Adjust geometry of decorations - - QRect geo = geometry(); - int y = geo.height() - progress->thickness(); -#if defined(Q_WS_MAEMO_5) - y -= toolBar->height(); -#endif - progress->setGeometry(0, y, geo.width(), y + progress->thickness()); - -#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(); + view->setLastBookmark(); + fullScreenWindow->leaveBookView(); + takeBookView(view, prog, prev, next); fullScreenWindow->hide(); show(); -#if defined(Q_OS_SYMBIAN) - activateWindow(); -#endif - progress->flash(); - nextButton->flash(); - previousButton->flash(); + view->scheduleRestoreLastBookmark(); } void MainWindow::showBig() { TRACE; - // Re-parent children - leaveChildren(); - QList otherChildren; - otherChildren << progress << nextButton << previousButton; - fullScreenWindow->takeChildren(view, otherChildren); + view->setLastBookmark(); + leaveBookView(); + fullScreenWindow->takeBookView(view, prog, prev, next); - // Adjust geometry of decorations - QRect screen = QApplication::desktop()->screenGeometry(); - int y = screen.height() - progress->thickness(); - progress->setGeometry(0, y, screen.width(), y + progress->thickness()); #if defined(Q_WS_MAEMO_5) - nextButton->setGeometry(screen.width() - TranslucentButton::pixels, 0, - TranslucentButton::pixels, TranslucentButton::pixels); + fullScreenWindow->raise(); #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); - -#ifdef Q_OS_SYMBIAN hide(); #endif fullScreenWindow->showFullScreen(); -#ifdef Q_OS_SYMBIAN - fullScreenWindow->activateWindow(); -#endif - progress->flash(); - nextButton->flash(); - previousButton->flash(); + view->scheduleRestoreLastBookmark(); } void MainWindow::setCurrentBook(const QModelIndex ¤t) @@ -282,17 +227,18 @@ void MainWindow::showSettings() (new SettingsWindow(this))->show(); } -void MainWindow::showInfo() +void MainWindow::rotate() { - if (mCurrent.isValid()) { - (new InfoDialog(Library::instance()->book(mCurrent), this, false))-> - exec(); - } + QString current = Settings::instance()->value("orientation", + Platform::instance()->defaultOrientation()).toString(); + QString target = (current == "landscape")? "portrait": "landscape"; + view->setLastBookmark(); + Settings::instance()->setValue("orientation", target); } void MainWindow::showDevTools() { - (new DevTools())->exec(); + (new DevTools(this))->exec(); } void MainWindow::showBookmarks() @@ -308,45 +254,28 @@ void MainWindow::showBookmarks() } } -void MainWindow::closeEvent(QCloseEvent *event) +void MainWindow::onSettingsChanged(const QString &key) { TRACE; - view->setLastBookmark(); - AdopterWindow::closeEvent(event); -} + qDebug() << "Key" << key; -void MainWindow::onSettingsChanged(const QString &key) -{ -#if defined(Q_WS_MAEMO_5) if (key == "orientation") { 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") { + qDebug() << "Value: orientation" << value; + Platform::instance()->setOrientation(this, value); + Platform::instance()->setOrientation(fullScreenWindow, value); + } + +#if defined(Q_WS_MAEMO_5) + 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 - Q_UNUSED(key); -#endif // Q_WS_MAEMO_5 +#endif // defined(Q_WS_MAEMO_5) } void MainWindow::onPartLoadStart() @@ -424,63 +353,28 @@ void MainWindow::timerEvent(QTimerEvent *event) AdopterWindow::timerEvent(event); } -void MainWindow::resizeEvent(QResizeEvent *e) -{ - TRACE; - - if (hasChild(progress)) { - qDebug() << "To" << e->size(); - int y = e->size().height() - progress->thickness(); -#if defined(Q_WS_MAEMO_5) - y -= toolBar->height(); -#endif - progress->setGeometry(0, y, e->size().width(), y + progress->thickness()); - -#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 - -#ifdef Q_WS_MAEMO_5 - // This is needed on Maemo, in order not to lose current reading position - // after orientation change - QTimer::singleShot(250, view, SLOT(restoreLastBookmark())); -#endif - previousButton->flash(); - nextButton->flash(); - } - QMainWindow::resizeEvent(e); -} - void MainWindow::about() { Dyalog *aboutDialog = new Dyalog(this, false); aboutDialog->setWindowTitle(tr("About Dorian")); QString version = Platform::instance()->version(); +#if !defined(Q_WS_MAEMO_5) && !defined(Q_OS_SYMBIAN) + QLabel *icon = new QLabel(aboutDialog); + QPixmap pixmap(Platform::instance()->icon("dorian")); + icon->setPixmap(pixmap); + aboutDialog->addWidget(icon); +#endif 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(version)); + label->setText(tr("Dorian %1

" + "Copyright © 2010-2011 by " + "Akos Polster <akos@pipacs.com>

" + "Licensed under GNU General Public License, Version 3

" + "" + "dorian.garage.maemo.org

" + ).arg(version)); aboutDialog->addWidget(label); aboutDialog->addStretch(); aboutDialog->show(); @@ -488,15 +382,15 @@ void MainWindow::about() void MainWindow::goToNextPage() { - nextButton->flash(); - previousButton->flash(); + next->flash(); + prev->flash(); view->goNextPage(); } void MainWindow::goToPreviousPage() { - nextButton->flash(); - previousButton->flash(); + next->flash(); + prev->flash(); view->goPreviousPage(); }