#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
+ // might be re-parented later
QFrame *central = new QFrame(this);
QVBoxLayout *layout = new QVBoxLayout(central);
layout->setMargin(0);
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"));
+ "chapters", tr("Chapters"), true);
bookmarksAction = addToolBarAction(this, SLOT(showBookmarks()),
- "bookmarks", tr("Bookmarks"));
- infoAction = addToolBarAction(this, SLOT(showInfo()),
- "info", tr("Book info"));
+ "bookmarks", tr("Bookmarks"), true);
libraryAction = addToolBarAction(this, SLOT(showLibrary()),
- "library", tr("Library"));
+ "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()),
// 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()));
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);
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);
TRACE;
Library *library = Library::instance();
+ // Show in regular (non full-screen) mode
+ showRegular();
+
// Upgrade library if needed, then load it
library->upgrade();
library->load();
{
TRACE;
- // Re-parent children
- fullScreenWindow->leaveChildren();
- QList<QWidget *> 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<QWidget *> 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);
+#ifdef Q_WS_MAEMO_5
+ 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)
(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()
}
}
-void MainWindow::closeEvent(QCloseEvent *event)
+void MainWindow::onSettingsChanged(const QString &key)
{
TRACE;
- view->setLastBookmark();
- event->accept();
-}
+ 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()
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);
label->setTextFormat(Qt::RichText);
label->setOpenExternalLinks(true);
label->setWordWrap(true);
- label->setText(tr("<b>Dorian %1</b><br><br>Copyright © 2010 "
- "Akos Polster <akos@pipacs.com><br>"
- "Licensed under GNU General Public License, Version 3<br>"
- "Source code:<br><a href='https://garage.maemo.org/projects/dorian/'>"
- "garage.maemo.org/projects/dorian</a>").arg(version));
+ label->setText(tr("<b>Dorian %1</b><br><br>"
+ "Copyright © 2010-2011 by "
+ "Akos Polster <akos@pipacs.com><br><br>"
+ "Licensed under GNU General Public License, Version 3<br><br>"
+ "<a href='http://dorian.garage.maemo.org/'>"
+ "dorian.garage.maemo.org</a><br><br>"
+ ).arg(version));
aboutDialog->addWidget(label);
aboutDialog->addStretch();
aboutDialog->show();
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();
}