+
+ return QObject::eventFilter(o, e);
+}
+
+void BookView::addJavaScriptObjects()
+{
+ page()->mainFrame()->addToJavaScriptWindowObject("bv", this);
+}
+
+void BookView::onContentsSizeChanged(const QSize &size)
+{
+ contentsHeight = size.height();
+ if (decorated) {
+ if (restorePositionAfterLoad) {
+ Trace::trace("BookView::onContentSizeChanged: Time to restore");
+ restorePositionAfterLoad = false;
+ goToPosition(positionAfterLoad);
+ }
+ }
+}
+
+void BookView::leaveEvent(QEvent *e)
+{
+ Trace t("BookView::leaveEvent");
+ // Save current position, to be restored later
+ setLastBookmark();
+ QWebView::leaveEvent(e);
+}
+
+void BookView::enterEvent(QEvent *e)
+{
+ Trace t("BookView::enterEvent");
+ // Restore position saved at Leave event. This seems to be required,
+ // after temporarily switching from portrait to landscape and back
+ restoreLastBookmark();
+ QWebView::enterEvent(e);
+}
+
+void BookView::goToPosition(qreal position)
+{
+ int scrollPos = (qreal)contentsHeight * position;
+ page()->mainFrame()->setScrollPosition(QPoint(0, scrollPos));
+ // FIXME: update();
+ Trace::trace(QString("BookView::goToPosition: To %1 (%2%, height %3)").
+ arg(scrollPos).arg(position * 100).arg(contentsHeight));
+}
+
+void BookView::showProgress()
+{
+ if (mBook) {
+ qreal pos = (qreal)(page()->mainFrame()->scrollPosition().y()) /
+ (qreal)contentsHeight;
+ emit progress(mBook->getProgress(contentIndex, pos));
+ }
+}
+
+void BookView::timerEvent(QTimerEvent *e)
+{
+ if (e->timerId() == scrollerMonitor) {
+#ifdef Q_WS_MAEMO_5
+ if (scroller &&
+ ((scroller->state() == QAbstractKineticScroller::AutoScrolling) ||
+ (scroller->state() == QAbstractKineticScroller::Pushing))) {
+ showProgress();
+ } else {
+ killTimer(scrollerMonitor);
+ }
+#endif // Q_WS_MAEMO_5
+ }
+}
+
+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();
+ int pos = frame->scrollPosition().y();
+ frame->scroll(0, -height());
+ if (pos == frame->scrollPosition().y()) {
+ if (contentIndex > 0) {
+ goToBookmark(Book::Bookmark(contentIndex - 1, 1.0));
+ }
+ } else {
+ showProgress();
+ }
+}
+
+void BookView::goNextPage()
+{
+ Trace t("BookView::goNextPage");
+ QWebFrame *frame = page()->mainFrame();
+ int pos = frame->scrollPosition().y();
+ frame->scroll(0, height());
+ if (pos == frame->scrollPosition().y()) {
+ goNext();
+ } else {
+ showProgress();
+ }