X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=bookview.cpp;h=fcdfd4b97a63b50778e0aa292b6341ec55538852;hb=31f032720bce6147580056d3c9f3165a4be77798;hp=05c5be9f6a898c7452baa246114fa03341602aaa;hpb=cf5242cde0ade17a4a308074ad6034d98ca69c8a;p=dorian diff --git a/bookview.cpp b/bookview.cpp index 05c5be9..fcdfd4b 100644 --- a/bookview.cpp +++ b/bookview.cpp @@ -2,9 +2,8 @@ #include #include -#if defined(Q_WS_MAEMO_5) -# include -#elif defined(Q_OS_SYMBIAN) +#if defined(Q_OS_SYMBIAN) +# include "mediakeysobserver.h" # include "flickcharm.h" #endif @@ -17,12 +16,13 @@ #include "progressdialog.h" #include "platform.h" -BookView::BookView(QWidget *parent): - QWebView(parent), contentIndex(-1), mBook(0), - restorePositionAfterLoad(false), positionAfterLoad(0), loaded(false), - contentsHeight(0) +BookView::BookView(QWidget *parent): QWebView(parent), contentIndex(-1), + mBook(0), restorePositionAfterLoad(false), positionAfterLoad(0), + restoreFragmentAfterLoad(false), loaded(false), grabbingVolumeKeys(false) { TRACE; + + // Set up web view defaults settings()->setAttribute(QWebSettings::AutoLoadImages, true); settings()->setAttribute(QWebSettings::JavascriptEnabled, true); settings()->setAttribute(QWebSettings::JavaEnabled, false); @@ -40,32 +40,34 @@ BookView::BookView(QWidget *parent): false); settings()->setDefaultTextEncoding("utf-8"); page()->setContentEditable(false); - -#if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN) - // Suppress unwanted text selections on Maemo and Symbian - installEventFilter(this); -#endif QWebFrame *frame = page()->mainFrame(); #if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN) frame->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); #endif frame->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); - - bookmarkImage = QImage(":/icons/bookmark.png"); - connect(this, SIGNAL(loadFinished(bool)), this, SLOT(onLoadFinished(bool))); connect(frame, SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(addJavaScriptObjects())); - connect(frame, SIGNAL(contentsSizeChanged(const QSize &)), - this, SLOT(onContentsSizeChanged(const QSize &))); - connect(Settings::instance(), SIGNAL(valueChanged(const QString &)), - this, SLOT(onSettingsChanged(const QString &))); + + // Suppress unwanted text selections on Maemo and Symbian +#if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN) + installEventFilter(this); +#endif + + // Pre-load bookmark icon + bookmarkImage = QImage(":/icons/bookmark.png"); + + // Handle settings changes, force handling initial settings Settings *s = Settings::instance(); + connect(s, SIGNAL(valueChanged(const QString &)), + this, SLOT(onSettingsChanged(const QString &))); s->setValue("zoom", s->value("zoom", 160)); s->setValue("font", s->value("font", Platform::defaultFont())); s->setValue("scheme", s->value("scheme", "default")); + s->setValue("usevolumekeys", s->value("usevolumekeys", false)); setBook(0); + // Enable kinetic scrolling #if defined(Q_WS_MAEMO_5) scrollerMonitor = 0; scroller = property("kineticScroller").value(); @@ -74,16 +76,19 @@ BookView::BookView(QWidget *parent): charm = new FlickCharm(this); charm->activateOn(this); #endif -} -BookView::~BookView() -{ - TRACE; + // Observe media keys on Symbian +#ifdef Q_OS_SYMBIAN + MediaKeysObserver *observer = MediaKeysObserver::instance(); + connect(observer, SIGNAL(mediaKeyPressed(MediaKeysObserver::MediaKeys)), + this, SLOT(onMediaKeysPressed(MediaKeysObserver::MediaKeys))); +#endif } void BookView::loadContent(int index) { TRACE; + if (!mBook) { return; } @@ -159,8 +164,9 @@ void BookView::setLastBookmark() { TRACE; if (mBook) { - int height = contentsHeight; - int pos = page()->mainFrame()->scrollPosition().y(); + QWebFrame *frame = page()->mainFrame(); + int height = frame->contentsSize().height(); + int pos = frame->scrollPosition().y(); qDebug() << QString("At %1 (%2%, height %3)"). arg(pos).arg((qreal)pos / (qreal)height * 100).arg(height); mBook->setLastBookmark(contentIndex, (qreal)pos / (qreal)height); @@ -229,6 +235,23 @@ void BookView::onLoadFinished(bool ok) onSettingsChanged("scheme"); onSettingsChanged("zoom"); onSettingsChanged("font"); + + QTimer::singleShot(210, this, SLOT(restoreAfterLoad())); +} + +void BookView::restoreAfterLoad() +{ + TRACE; + if (restoreFragmentAfterLoad) { + qDebug() << "Restorint to fragment" << fragmentAfterLoad; + goToFragment(fragmentAfterLoad); + restoreFragmentAfterLoad = false; + } else if (restorePositionAfterLoad) { + qDebug() << "Restoring to position" << positionAfterLoad; + goToPosition(positionAfterLoad); + restorePositionAfterLoad = false; + } + emit partLoadEnd(contentIndex); showProgress(); } @@ -258,6 +281,9 @@ void BookView::onSettingsChanged(const QString &key) script.close(); QVariant ret = frame->evaluateJavaScript(scriptText); } + else if (key == "usevolumekeys") { + grabVolumeKeys(Settings::instance()->value(key).toBool()); + } } void BookView::paintEvent(QPaintEvent *e) @@ -268,7 +294,9 @@ void BookView::paintEvent(QPaintEvent *e) } // Paint bookmarks - QPoint scrollPos = page()->mainFrame()->scrollPosition(); + QWebFrame *frame = page()->mainFrame(); + int contentsHeight = frame->contentsSize().height(); + QPoint scrollPos = frame->scrollPosition(); QPixmap bookmarkPixmap = QPixmap::fromImage(bookmarkImage); QPainter painter(this); foreach (Book::Bookmark b, mBook->bookmarks()) { @@ -284,7 +312,7 @@ void BookView::paintEvent(QPaintEvent *e) void BookView::mousePressEvent(QMouseEvent *e) { QWebView::mousePressEvent(e); -#if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_MAEMO_5) // Start monitoring kinetic scroll if (scrollerMonitor) { killTimer(scrollerMonitor); @@ -373,21 +401,6 @@ void BookView::addJavaScriptObjects() page()->mainFrame()->addToJavaScriptWindowObject("bv", this); } -void BookView::onContentsSizeChanged(const QSize &size) -{ - TRACE; - contentsHeight = size.height(); - if (restoreFragmentAfterLoad) { - qDebug() << "Restorint to fragment" << fragmentAfterLoad; - goToFragment(fragmentAfterLoad); - } else if (restorePositionAfterLoad) { - qDebug() << "Restoring to position"; - goToPosition(positionAfterLoad); - } - restorePositionAfterLoad = false; - restoreFragmentAfterLoad = false; -} - #ifdef Q_WS_MAEMO_5 void BookView::leaveEvent(QEvent *e) @@ -411,6 +424,7 @@ void BookView::enterEvent(QEvent *e) void BookView::goToPosition(qreal position) { + int contentsHeight = page()->mainFrame()->contentsSize().height(); int scrollPos = (int)((qreal)contentsHeight * position); page()->mainFrame()->setScrollPosition(QPoint(0, scrollPos)); // FIXME: update(); @@ -421,6 +435,7 @@ void BookView::goToPosition(qreal position) void BookView::showProgress() { if (mBook) { + int contentsHeight = page()->mainFrame()->contentsSize().height(); qreal pos = (qreal)(page()->mainFrame()->scrollPosition().y()) / (qreal)contentsHeight; emit progress(mBook->getProgress(contentIndex, pos)); @@ -440,31 +455,10 @@ void BookView::timerEvent(QTimerEvent *e) scrollerMonitor = -1; } } -#elif defined(Q_OS_SYMBIAN) - if (e->timerId() == scrollerMonitor) { - if (charm && charm->) - } #endif QWebView::timerEvent(e); } -void BookView::keyPressEvent(QKeyEvent* event) -{ - switch (event->key()) { - case Qt::Key_F7: - goNextPage(); - event->accept(); - break; - case Qt::Key_F8: - goPreviousPage(); - event->accept(); - break; - default: - ; - } - QWebView::keyPressEvent(event); -} - void BookView::goPreviousPage() { QWebFrame *frame = page()->mainFrame(); @@ -494,3 +488,28 @@ void BookView::goNextPage() showProgress(); } } + +void BookView::grabVolumeKeys(bool grab) +{ + TRACE; + grabbingVolumeKeys = grab; +} + +#ifdef Q_OS_SYMBIAN + +void BookView::onMediaKeysPressed(MediaKeysObserver::MediaKeys key) +{ + TRACE; + qDebug() << "Key" << (int)key; + if (grabbingVolumeKeys) { + if (key == MediaKeysObserver::EVolIncKey) { + qDebug() << "Volume up"; + goPreviousPage(); + } else if (key == MediaKeysObserver::EVolDecKey){ + qDebug() << "Volume down"; + goNextPage(); + } + } +} + +#endif // Q_OS_SYMBIAN