X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=mainwindow.cpp;h=6486ec55606b39175cc32cfb660c78aaa0bff4c0;hb=5648f4dcb3f32f229b54f94fb4b243ffb2080959;hp=bfb900707201fe5876782a6821fb8d97e28db92f;hpb=f20681cd459f9ac2dcf87763206ea99bc9d5094f;p=dorian diff --git a/mainwindow.cpp b/mainwindow.cpp index bfb9007..6486ec5 100755 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -29,13 +29,12 @@ #include "translucentbutton.h" #include "platform.h" #include "progressdialog.h" +#include "sortedlibrary.h" #ifdef DORIAN_TEST_MODEL # include "modeltest.h" #endif -const int DORIAN_PROGRESS_HEIGHT = 17; - MainWindow::MainWindow(QWidget *parent): AdopterWindow(parent), view(0), preventBlankingTimer(-1) { @@ -45,6 +44,17 @@ MainWindow::MainWindow(QWidget *parent): #endif setWindowTitle("Dorian"); +#ifdef Q_OS_SYMBIAN + // Tool bar + toolBar = new QToolBar("", this /*frame*/); + toolBar->setFixedWidth(QApplication::desktop()-> + availableGeometry().width()); + toolBar->setFixedHeight(65); + toolBar->setStyleSheet("margin:0;border:0;padding:0"); + toolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Maximum); + addToolBar(Qt::BottomToolBarArea, toolBar); +#endif + // Central widget. Must be an intermediate, because the book view widget // can be re-parented later QFrame *central = new QFrame(this); @@ -54,16 +64,13 @@ MainWindow::MainWindow(QWidget *parent): setCentralWidget(central); // Book view - view = new BookView(central); + view = new BookView(this); view->show(); layout->addWidget(view); - // Progress + // Dialogs progress = new Progress(this); - // Settings dialog - settings = new QDialog(this); - // Tool bar actions #ifdef Q_OS_SYMBIAN @@ -72,13 +79,13 @@ MainWindow::MainWindow(QWidget *parent): #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")); @@ -118,32 +125,6 @@ MainWindow::MainWindow(QWidget *parent): 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); - 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())); @@ -157,11 +138,8 @@ MainWindow::MainWindow(QWidget *parent): 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")); // Handle book view buttons connect(nextButton, SIGNAL(triggered()), this, SLOT(goToNextPage())); @@ -175,8 +153,40 @@ MainWindow::MainWindow(QWidget *parent): #endif } +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))); + } + } +} + void MainWindow::onCurrentBookChanged() { + TRACE; setCurrentBook(Library::instance()->nowReading()); } @@ -190,20 +200,36 @@ void MainWindow::showRegular() otherChildren << progress << previousButton << nextButton; takeChildren(view, otherChildren); +#if 0 + // Adjust geometry of decorations + QRect geo = geometry(); - progress->setGeometry(0, 0, geo.width(), DORIAN_PROGRESS_HEIGHT); -#if defined(Q_WS_MAEMO_5) - previousButton->setGeometry(0, - geo.height() - toolBar->height() - TranslucentButton::pixels, - TranslucentButton::pixels, TranslucentButton::pixels); + qDebug() << "MainWindow (MainWindow::showRegular)" << geo; + qDebug() << "BookView (MainWindow::showRegular)" << view->geometry(); + int y = geo.height() - progress->thickness(); +#if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN) + bool hasToolBar = false; +# if defined(Q_OS_SYMBIAN) + hasToolBar = + (QApplication::desktop()->width() < QApplication::desktop()->height()); + qDebug() << (hasToolBar? "Portrait": "Landscape"); +# endif + if (!hasToolBar) { + y -= toolBar->height(); + } +#endif + progress->setGeometry(0, y, geo.width(), y + progress->thickness()); + +#if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN) + y = geo.height() - TranslucentButton::pixels; + if (!hasToolBar) { + y -= toolBar->height(); + } + previousButton->setGeometry(0, y, 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); @@ -213,17 +239,13 @@ void MainWindow::showRegular() #endif // Q_WS_MAEMO_5 qDebug() << "previousButton geometry" << previousButton->geometry(); +#endif + 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->flash(); - previousButton->flash(); } void MainWindow::showBig() @@ -232,13 +254,14 @@ void MainWindow::showBig() // Re-parent children leaveChildren(); - QList otherChildren; - otherChildren << progress << nextButton << previousButton; - fullScreenWindow->takeChildren(view, otherChildren); + fullScreenWindow->takeChildren(view, progress, previousButton, nextButton); + +#if 0 // Adjust geometry of decorations QRect screen = QApplication::desktop()->screenGeometry(); - progress->setGeometry(0, 0, screen.width(), DORIAN_PROGRESS_HEIGHT); + 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); @@ -249,16 +272,16 @@ void MainWindow::showBig() previousButton->setGeometry(0, screen.height() - TranslucentButton::pixels, TranslucentButton::pixels, TranslucentButton::pixels); -#ifdef Q_OS_SYMBIAN - hide(); #endif + +// #ifdef Q_OS_SYMBIAN + hide(); +// #endif + fullScreenWindow->showFullScreen(); #ifdef Q_OS_SYMBIAN fullScreenWindow->activateWindow(); #endif - progress->flash(); - nextButton->flash(); - previousButton->flash(); } void MainWindow::setCurrentBook(const QModelIndex ¤t) @@ -297,7 +320,6 @@ 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(const QString &)), this, SLOT(onAddBookmark(const QString &))); connect(bookmarks, SIGNAL(goToBookmark(int)), @@ -310,37 +332,47 @@ void MainWindow::closeEvent(QCloseEvent *event) { TRACE; view->setLastBookmark(); - event->accept(); + AdopterWindow::closeEvent(event); } void MainWindow::onSettingsChanged(const QString &key) { - TRACE; - qDebug() << key; #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; killTimer(preventBlankingTimer); if (enable) { preventBlankingTimer = startTimer(29 * 1000); } } +#else + Q_UNUSED(key); #endif // Q_WS_MAEMO_5 } void MainWindow::onPartLoadStart() { TRACE; - Platform::showBusy(this, true); + Platform::instance()->showBusy(this, true); } void MainWindow::onPartLoadEnd(int index) @@ -357,14 +389,14 @@ void MainWindow::onPartLoadEnd(int index) enableNext = true; } } - Platform::showBusy(this, false); + Platform::instance()->showBusy(this, false); } void MainWindow::onAddBookmark(const QString ¬e) { TRACE; view->addBookmark(note); - Platform::information(tr("Bookmarked current position"), this); + Platform::instance()->information(tr("Bookmarked current position"), this); } void MainWindow::onGoToBookmark(int index) @@ -379,7 +411,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(); @@ -415,35 +446,70 @@ void MainWindow::timerEvent(QTimerEvent *event) void MainWindow::resizeEvent(QResizeEvent *e) { - 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, - 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(); - nextButton->flash(); - QMainWindow::resizeEvent(e); + Trace t("MainWindow::resizeEvent"); +#ifdef Q_OS_SYMBIAN + // Tool bar is only useful in portrait mode + bool isPortrait = + (QApplication::desktop()->width() < QApplication::desktop()->height()); + toolBar->setVisible(isPortrait); +#endif + QTimer::singleShot(100, this, SLOT(placeChildren())); + AdopterWindow::resizeEvent(e); +} + +void MainWindow::placeChildren() +{ + Trace t("MainWindow::placeChildren"); + + int toolBarHeight = 0; + +#ifdef Q_OS_SYMBIAN + // Tool bar is only useful in portrait mode + bool isPortrait = + (QApplication::desktop()->width() < QApplication::desktop()->height()); + // toolBar->setVisible(isPortrait); + + // Work around Symbian bug: If there is no tool bar, increase decorator + // widgets' Y coordinates + if (!isPortrait) { + toolBarHeight = toolBar->height(); + } +#endif // Q_OS_SYMBIAN + + if (hasChild(view)) { + QRect geo = centralWidget()->geometry(); + qDebug() << "centralWidget (MainWindow::resizeEvent)" << geo; +#ifdef Q_OS_SYMBIAN + // FIXME: When returning from full screen in landscape mode, + // the central widget's height is miscalculated on Symbian. + // My apologies for this kludge + if (geo.height() == 288) { + geo.setHeight(223); + } +#endif // Q_OS_SYMBIAN + progress->setGeometry(geo.x(), + geo.y() + geo.height() - progress->thickness() + toolBarHeight, + geo.width(), progress->thickness()); + previousButton->setGeometry(geo.x(), + geo.y() + geo.height() - TranslucentButton::pixels + toolBarHeight, + TranslucentButton::pixels, TranslucentButton::pixels); + nextButton->setGeometry( + geo.x() + geo.width() - TranslucentButton::pixels, + geo.y(), TranslucentButton::pixels, TranslucentButton::pixels); + progress->flash(); + previousButton->flash(); + nextButton->flash(); + qDebug() << "Progress (MainWindow::resizeEvent)" + << progress->geometry(); + } + } void MainWindow::about() { 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); @@ -452,7 +518,7 @@ void MainWindow::about() "Akos Polster <akos@pipacs.com>
" "Licensed under GNU General Public License, Version 3
" "Source code:
" - "garage.maemo.org/projects/dorian").arg(Platform::version())); + "garage.maemo.org/projects/dorian").arg(version)); aboutDialog->addWidget(label); aboutDialog->addStretch(); aboutDialog->show();