+ TRACE;
+ int contentsHeight = page()->mainFrame()->contentsSize().height();
+ int scrollPos = (int)((qreal)contentsHeight * position);
+ page()->mainFrame()->setScrollPosition(QPoint(0, scrollPos));
+ // FIXME: update();
+ qDebug() << "BookView::goToPosition: To" << scrollPos << "("
+ << (position * 100) << "%, height" << contentsHeight << ")";
+}
+
+void BookView::showProgress()
+{
+ TRACE;
+ if (mBook) {
+ int contentsHeight = page()->mainFrame()->contentsSize().height();
+ qreal pos = (qreal)(page()->mainFrame()->scrollPosition().y()) /
+ (qreal)contentsHeight;
+ emit progress(mBook->getProgress(contentIndex, pos));
+ }
+}
+
+void BookView::timerEvent(QTimerEvent *e)
+{
+#if defined(Q_WS_MAEMO_5)
+ if (e->timerId() == scrollerMonitor) {
+ if (scroller &&
+ ((scroller->state() == QAbstractKineticScroller::AutoScrolling) ||
+ (scroller->state() == QAbstractKineticScroller::Pushing))) {
+ showProgress();
+ } else {
+ killTimer(scrollerMonitor);
+ scrollerMonitor = -1;
+ }
+ }
+#endif // Q_WS_MAEMO_5
+
+ QWebView::timerEvent(e);
+}
+
+void BookView::hideEvent(QHideEvent *e)
+{
+ Trace t("BookView::hideEvent");
+
+#if defined(Q_OS_SYMBIAN)
+ setLastBookmark();
+#endif
+
+ QWebView::hideEvent(e);
+}
+
+void BookView::goPreviousPage()
+{
+ QWebFrame *frame = page()->mainFrame();
+ const int pos = frame->scrollPosition().y();
+ frame->scroll(0, -1);
+ if (pos == frame->scrollPosition().y()) {
+ if (contentIndex > 0) {
+ Book::Bookmark bookmark(contentIndex - 1, 1.0);
+ mBook->setLastBookmark(contentIndex - 1, 1.0);
+ goToBookmark(bookmark);
+ }
+ } else {
+ showProgress();
+ QPropertyAnimation *slide =
+ new QPropertyAnimation(frame, "scrollPosition");
+ const QPoint *offset = new QPoint(0, height() - 18);
+ slide->setDuration(400);
+ slide->setStartValue(frame->scrollPosition());
+ slide->setEndValue(frame->scrollPosition() - *offset);
+ slide->setEasingCurve(QEasingCurve::OutQuad);
+ slide->start(QAbstractAnimation::DeleteWhenStopped);
+ delete offset;
+ }
+}