X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=bookview.cpp;h=7e6cfd581ea1cfd08e08886cec88378b983ca1b7;hb=b855b46f739479ca0d6dd15b73a4c56a8d8a2d2c;hp=d588c28d29d462e7d9d5c520739667ee546dfcdd;hpb=986c5df2ad57bad44e8dd02286a2326406ace831;p=dorian diff --git a/bookview.cpp b/bookview.cpp index d588c28..7e6cfd5 100644 --- a/bookview.cpp +++ b/bookview.cpp @@ -16,9 +16,9 @@ #include "progressdialog.h" #include "platform.h" -BookView::BookView(QWidget *parent): QWebView(parent), contentIndex(-1), mBook(0), - restorePositionAfterLoad(false), positionAfterLoad(0), loaded(false), - contentsHeight(0), grabbingVolumeKeys(false) +BookView::BookView(QWidget *parent): QWebView(parent), contentIndex(-1), + mBook(0), restorePositionAfterLoad(false), positionAfterLoad(0), + restoreFragmentAfterLoad(false), loaded(false), grabbingVolumeKeys(false) { TRACE; @@ -48,8 +48,6 @@ BookView::BookView(QWidget *parent): QWebView(parent), contentIndex(-1), mBook(0 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 &))); // Suppress unwanted text selections on Maemo and Symbian #if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN) @@ -60,13 +58,8 @@ BookView::BookView(QWidget *parent): QWebView(parent), contentIndex(-1), mBook(0 bookmarkImage = QImage(":/icons/bookmark.png"); // Handle settings changes, force handling initial settings - Settings *s = Settings::instance(); - connect(s, SIGNAL(valueChanged(const QString &)), + connect(Settings::instance(), 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 @@ -166,8 +159,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); @@ -202,14 +196,18 @@ void BookView::goToPart(int part, const QString &fragment) { TRACE; if (mBook) { - if (part != contentIndex) { - qDebug() << "Loading new part" << part; - restoreFragmentAfterLoad = true; - fragmentAfterLoad = fragment; - loadContent(part); + if (fragment.isEmpty()) { + goToBookmark(Book::Bookmark(part, 0)); } else { - goToFragment(fragment); - showProgress(); + if (part != contentIndex) { + qDebug() << "Loading new part" << part; + restoreFragmentAfterLoad = true; + fragmentAfterLoad = fragment; + loadContent(part); + } else { + goToFragment(fragment); + showProgress(); + } } } } @@ -221,7 +219,7 @@ void BookView::goToFragment(const QString &fragment) QVariant ret = page()->mainFrame()->evaluateJavaScript( QString("window.location='") + fragment + "'"); qDebug() << ret; - setLastBookmark(); + // FIXME: setLastBookmark(); } } @@ -236,20 +234,40 @@ 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(); } void BookView::onSettingsChanged(const QString &key) { - TRACE; - qDebug() << key << Settings::instance()->value(key); + Settings *s = Settings::instance(); + Platform *p = Platform::instance(); if (key == "zoom") { - setZoomFactor(Settings::instance()->value(key).toFloat() / 100.); + int value = s->value(key, p->defaultZoom()).toInt(); + qDebug() << "BookView::onSettingsChanged: zoom" << value; + setZoomFactor(value / 100.); } else if (key == "font") { - QString face = Settings::instance()->value(key).toString(); + QString face = s->value(key, p->defaultFont()).toString(); + qDebug() << "BookView::onSettingsChanged: font" << face; settings()->setFontFamily(QWebSettings::StandardFont, face); } else if (key == "scheme") { @@ -259,14 +277,17 @@ void BookView::onSettingsChanged(const QString &key) (scheme != "default")) { scheme = "default"; } + qDebug() << "BookView::onSettingsChanged: scheme" << scheme; QFile script(":/styles/" + scheme + ".js"); script.open(QFile::ReadOnly); QString scriptText = script.readAll(); script.close(); - QVariant ret = frame->evaluateJavaScript(scriptText); + (void)frame->evaluateJavaScript(scriptText); } else if (key == "usevolumekeys") { - grabVolumeKeys(Settings::instance()->value(key).toBool()); + bool grab = s->value(key, false).toBool(); + qDebug() << "BookView::onSettingsChanged: usevolumekeys" << grab; + grabVolumeKeys(grab); } } @@ -278,7 +299,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()) { @@ -383,44 +406,9 @@ 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) -{ - TRACE; - // Save current position, to be restored later - setLastBookmark(); - QWebView::leaveEvent(e); -} - -void BookView::enterEvent(QEvent *e) -{ - TRACE; - // Restore position saved at Leave event. This seems to be required, - // after temporarily switching from portrait to landscape and back - restoreLastBookmark(); - QWebView::enterEvent(e); -} - -#endif // Q_WS_MAEMO_5 - 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(); @@ -431,6 +419,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)); @@ -458,7 +447,7 @@ void BookView::goPreviousPage() { QWebFrame *frame = page()->mainFrame(); int pos = frame->scrollPosition().y(); - frame->scroll(0, -height()); + frame->scroll(0, -(height() - 19)); if (pos == frame->scrollPosition().y()) { if (contentIndex > 0) { Book::Bookmark bookmark(contentIndex - 1, 1.0); @@ -475,11 +464,11 @@ void BookView::goNextPage() TRACE; QWebFrame *frame = page()->mainFrame(); int pos = frame->scrollPosition().y(); - frame->scroll(0, height()); + frame->scroll(0, height() - 19); if (pos == frame->scrollPosition().y()) { goNext(); } else { - setLastBookmark(); + // setLastBookmark(); showProgress(); } } @@ -499,10 +488,10 @@ void BookView::onMediaKeysPressed(MediaKeysObserver::MediaKeys key) if (grabbingVolumeKeys) { if (key == MediaKeysObserver::EVolIncKey) { qDebug() << "Volume up"; - goNextPage(); + goPreviousPage(); } else if (key == MediaKeysObserver::EVolDecKey){ qDebug() << "Volume down"; - goPreviousPage(); + goNextPage(); } } }