X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=adopterwindow.cpp;h=23bbf576b2d7383b6ee86c9c32d8b4d167431c2b;hb=b843ed247e4cbaa89d81c528902f0b5d7080c216;hp=3299af100d7df430ac48111646f4e84594a624ac;hpb=6c8d9bb19213aee37517232ef889409200e53ac1;p=dorian diff --git a/adopterwindow.cpp b/adopterwindow.cpp index 3299af1..23bbf57 100644 --- a/adopterwindow.cpp +++ b/adopterwindow.cpp @@ -15,43 +15,15 @@ #include "progress.h" #include "translucentbutton.h" -AdopterWindow::AdopterWindow(QWidget *parent): - QMainWindow(parent), bookView(0), grabbingVolumeKeys(false), toolBar(0), - progress(0), previousButton(0), nextButton(0) +AdopterWindow::AdopterWindow(QWidget *parent): MainBase(parent), bookView(0), + grabbingVolumeKeys(false), progress(0), previousButton(0), nextButton(0) { TRACE; -#ifdef Q_WS_MAEMO_5 - setAttribute(Qt::WA_Maemo5StackedWindow, true); -#endif - - QFrame *frame = new QFrame(this); - QVBoxLayout *layout = new QVBoxLayout(frame); - layout->setMargin(0); - frame->setLayout(layout); - frame->show(); - setCentralWidget(frame); - -#ifdef Q_OS_SYMBIAN - QAction *closeAction = new QAction(parent? tr("Back"): tr("Exit"), this); - closeAction->setSoftKeyRole(QAction::NegativeSoftKey); - connect(closeAction, SIGNAL(triggered()), this, SLOT(close())); - QMainWindow::addAction(closeAction); -#else - // Tool bar - setUnifiedTitleAndToolBarOnMac(true); - toolBar = addToolBar(""); - toolBar->setMovable(false); - toolBar->setFloatable(false); - toolBar->toggleViewAction()->setVisible(false); -#if defined(Q_WS_X11) && !defined(Q_WS_MAEMO_5) - toolBar->setIconSize(QSize(42, 42)); -#endif -#endif // Q_OS_SYMBIAN - // Monitor settings connect(Settings::instance(), SIGNAL(valueChanged(const QString &)), this, SLOT(onSettingsChanged(const QString &))); + } void AdopterWindow::takeBookView(BookView *view, @@ -66,12 +38,14 @@ void AdopterWindow::takeBookView(BookView *view, Q_ASSERT(previous); Q_ASSERT(next); - leaveBookView(); + if (bookView) { + return; + } bookView = view; bookView->setParent(this); - bookView->show(); centralWidget()->layout()->addWidget(bookView); + // bookView->show(); progress = prog; previousButton = previous; @@ -79,18 +53,30 @@ void AdopterWindow::takeBookView(BookView *view, progress->setParent(this); previousButton->setParent(this); nextButton->setParent(this); + + // Handle page and/or volume keys + connect(this, SIGNAL(pageUp()), this, SLOT(onPageUp()), + Qt::QueuedConnection); + connect(this, SIGNAL(pageDown()), this, SLOT(onPageDown()), + Qt::QueuedConnection); } void AdopterWindow::leaveBookView() { TRACE; - if (bookView) { - centralWidget()->layout()->removeWidget(bookView); + + if (!bookView) { + return; } + + // bookView->hide(); + centralWidget()->layout()->removeWidget(bookView); bookView = 0; progress = 0; nextButton = 0; previousButton = 0; + disconnect(this, SLOT(onPageUp())); + disconnect(this, SLOT(onPageDown())); } bool AdopterWindow::hasBookView() @@ -98,78 +84,6 @@ bool AdopterWindow::hasBookView() return bookView != 0; } -void AdopterWindow::show() -{ -#ifdef Q_OS_SYMBIAN - foreach (QWidget *w, QApplication::allWidgets()) { - w->setContextMenuPolicy(Qt::NoContextMenu); - } - showMaximized(); - raise(); -#else - QMainWindow::show(); -#endif -} - -QAction *AdopterWindow::addToolBarAction(QObject *receiver, - const char *member, - const QString &iconName, - const QString &text, - bool important) -{ - TRACE; - qDebug() << "icon" << iconName << "text" << text; - QAction *action; -#ifndef Q_OS_SYMBIAN - Q_UNUSED(important); - action = toolBar->addAction(QIcon(Platform::instance()->icon(iconName)), - text, receiver, member); -#else - if (!toolBar && important) { - // Create tool bar if needed - toolBar = new QToolBar("", this); - // 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); - } - if (important) { - // Add tool bar action - QPushButton *button = new QPushButton(this); - button->setIconSize(QSize(60, 60)); - button->setFixedSize(89, 60); - button->setIcon(QIcon(Platform::instance()->icon(iconName))); - button->setSizePolicy(QSizePolicy::MinimumExpanding, - QSizePolicy::Maximum); - connect(button, SIGNAL(clicked()), receiver, member); - toolBar->addWidget(button); - } - // Add menu action, too - action = new QAction(text, this); - menuBar()->addAction(action); - connect(action, SIGNAL(triggered()), receiver, member); -#endif - -#if defined Q_WS_MAEMO_5 - action->setText(""); - action->setToolTip(""); -#endif - - return action; -} - -void AdopterWindow::addToolBarSpace() -{ -#ifndef Q_OS_SYMBIAN - QFrame *frame = new QFrame(toolBar); - frame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - toolBar->addWidget(frame); -#endif -} - void AdopterWindow::grabVolumeKeys(bool grab) { TRACE; @@ -193,7 +107,8 @@ void AdopterWindow::doGrabVolumeKeys(bool grab) return; } unsigned long val = grab? 1: 0; - Atom atom = XInternAtom(QX11Info::display(), "_HILDON_ZOOM_KEY_ATOM", False); + Atom atom = + XInternAtom(QX11Info::display(), "_HILDON_ZOOM_KEY_ATOM", False); if (!atom) { qCritical() << "Unable to obtain _HILDON_ZOOM_KEY_ATOM"; return; @@ -211,68 +126,71 @@ void AdopterWindow::doGrabVolumeKeys(bool grab) #endif // Q_WS_MAEMO_5 -void AdopterWindow::showEvent(QShowEvent *e) +void AdopterWindow::showEvent(QShowEvent *event) { Trace t("AdopterWindow::showEvent"); + MainBase::showEvent(event); #if defined(Q_WS_MAEMO_5) doGrabVolumeKeys(grabbingVolumeKeys); -#endif // Q_WS_MAEMO_5 - QMainWindow::showEvent(e); +#endif + placeDecorations(); } void AdopterWindow::resizeEvent(QResizeEvent *event) { Trace t("AdopterWindow::resizeEvent"); -#ifdef Q_OS_SYMBIAN - if (toolBar) { - if (portrait()) { - qDebug() << "Show tool bar"; - toolBar->setVisible(true); - } else { - qDebug() << "Hide tool bar"; - toolBar->setVisible(false); - } + MainBase::resizeEvent(event); + placeDecorations(); +#if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN) + // Restore previous reading position + if (bookView) { + bookView->scheduleRestoreLastBookmark(); } -#endif // Q_OS_SYMBIAN +#endif // defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN) +} - if (hasBookView()) { - QTimer::singleShot(100, this, SLOT(placeDecorations())); +void AdopterWindow::closeEvent(QCloseEvent *event) +{ + Trace t("AdopterWindow::closeEvent"); + if (bookView) { + bookView->setLastBookmark(); } - QMainWindow::resizeEvent(event); + MainBase::closeEvent(event); +} + +void AdopterWindow::leaveEvent(QEvent *event) +{ + Trace t("AdopterWindow::leaveEvent"); + if (bookView) { + bookView->setLastBookmark(); + } + MainBase::leaveEvent(event); } void AdopterWindow::keyPressEvent(QKeyEvent *event) { TRACE; - if (bookView && grabbingVolumeKeys) { - switch (event->key()) { + switch (event->key()) { + case Qt::Key_PageDown: #ifdef Q_WS_MAEMO_5 - case Qt::Key_F7: - qDebug() << "F7"; - bookView->goNextPage(); - event->accept(); - break; - case Qt::Key_F8: - qDebug() << "F8"; - bookView->goPreviousPage(); - event->accept(); - break; -#endif // Q_WS_MAEMO_5 - case Qt::Key_PageUp: - bookView->goPreviousPage(); - event->accept(); - break; - case Qt::Key_PageDown: - bookView->goNextPage(); - event->accept(); - break; - default: - ; - } + case Qt::Key_F7: +#endif + emit pageDown(); + event->accept(); + break; + case Qt::Key_PageUp: +#ifdef Q_WS_MAEMO_5 + case Qt::Key_F8: +#endif + emit pageUp(); + event->accept(); + break; + default: + ; } - QMainWindow::keyPressEvent(event); + MainBase::keyPressEvent(event); } void AdopterWindow::onSettingsChanged(const QString &key) @@ -284,52 +202,49 @@ void AdopterWindow::onSettingsChanged(const QString &key) } } -bool AdopterWindow::portrait() -{ - QRect geometry = QApplication::desktop()->geometry(); - return geometry.width() < geometry.height(); -} - void AdopterWindow::placeDecorations() { Trace t("AdopterWindow::placeDecorations"); if (!hasBookView()) { + qDebug() << "Doesn't have the book view"; return; } - int toolBarHeight = 0; + qDebug() << "Has the book view"; + int extraHeight = 0; QRect geo = bookView->geometry(); qDebug() << "bookView:" << geo; -#ifdef Q_OS_SYMBIAN - // Work around Symbian bug: If tool bar is hidden, increase bottom - // decorator widgets' Y coordinates by the tool bar's height - if (!portrait() && toolBar) { - toolBarHeight = toolBar->height(); - } - - // Work around another Symbian bug: When returning from full screen mode - // in landscape, the book view widget's height is miscalculated. - // My apologies for this kludge - if (geo.height() == 288) { - qDebug() << "Adjusting bottom Y"; - toolBarHeight -= 288 - 223; - } -#endif // Q_OS_SYMBIAN - progress->setGeometry(geo.x(), - geo.y() + geo.height() - progress->thickness() + toolBarHeight, + geo.y() + geo.height() - progress->thickness() + extraHeight, geo.width(), progress->thickness()); previousButton->setGeometry(geo.x(), - geo.y() + geo.height() - TranslucentButton::pixels + toolBarHeight, + geo.y() + geo.height() - TranslucentButton::pixels + extraHeight, TranslucentButton::pixels, TranslucentButton::pixels); - nextButton->setGeometry( - geo.x() + geo.width() - TranslucentButton::pixels, + nextButton->setGeometry(geo.x() + geo.width() - TranslucentButton::pixels, geo.y(), TranslucentButton::pixels, TranslucentButton::pixels); progress->flash(); previousButton->flash(); nextButton->flash(); qDebug() << "progress:" << progress->geometry(); } + +void AdopterWindow::onPageUp() +{ + if (bookView && grabbingVolumeKeys) { + setEnabled(false); + bookView->goPreviousPage(); + setEnabled(true); + } +} + +void AdopterWindow::onPageDown() +{ + if (bookView && grabbingVolumeKeys) { + setEnabled(false); + bookView->goNextPage(); + setEnabled(true); + } +}