enter/leave events only on Maemo.
{
bool ok;
QString text = QInputDialog::getText(this, tr("Add bookmark"),
- tr("Note:"), QLineEdit::Normal,
- QString(), &ok);
+ tr("Note (optional):"), QLineEdit::Normal, QString(), &ok);
if (ok) {
emit addBookmark(text);
close();
QString contentFile(mBook->content[mBook->parts[index]].href);
if (mBook->parts[index] == "error") {
setHtml(contentFile);
- }
- else {
+ } else {
loaded = false;
emit partLoadStart(index);
QUrl u = QUrl::fromLocalFile(QDir(mBook->rootPath()).
}
}
+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);
+ } else {
+ goToFragment(fragment);
+ showProgress();
+ }
+ }
+}
+
+void BookView::goToFragment(const QString &fragment)
+{
+ TRACE;
+ if (!fragment.isEmpty()) {
+ QVariant ret = page()->mainFrame()->evaluateJavaScript(
+ QString("window.location='") + fragment + "'");
+ qDebug() << ret;
+ setLastBookmark();
+ }
+}
+
void BookView::onLoadFinished(bool ok)
{
TRACE;
void BookView::onContentsSizeChanged(const QSize &size)
{
+ TRACE;
contentsHeight = size.height();
- if (restorePositionAfterLoad) {
- qDebug() << "BookView::onContentSizeChanged: Time to restore";
- restorePositionAfterLoad = false;
+ 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;
QWebView::enterEvent(e);
}
+#endif // Q_WS_MAEMO_5
+
void BookView::goToPosition(qreal position)
{
int scrollPos = (int)((qreal)contentsHeight * position);
void addBookmark(const QString ¬e);
void setLastBookmark();
void restoreLastBookmark();
+ void goToPart(int part, const QString &fragment);
+ void goToFragment(const QString &fragment);
signals:
void partLoadStart(int index);
void partLoadEnd(int index);
- /** Signal button press when the real event has been suppressed. */
+ /** Signal button press, when the real event has been suppressed. */
void suppressedMouseButtonPress();
/** Signal progress in reading the book. */
void mousePressEvent(QMouseEvent *e);
void wheelEvent(QWheelEvent *);
bool eventFilter(QObject *o, QEvent *e);
+#ifdef Q_WS_MAEMO_5
void leaveEvent(QEvent *e);
void enterEvent(QEvent *e);
+#endif // Q_WS_MAEMO_5
void timerEvent(QTimerEvent *e);
void keyPressEvent(QKeyEvent *e);
/**< If true, restore current position after load. */
qreal positionAfterLoad;
/**< Position to be restored after load. */
+ bool restoreFragmentAfterLoad;
+ /**< If true, restore fragment location after load. */
+ QString fragmentAfterLoad;
+ /**< Fragment location to be restored after load. */
QImage bookmarkImage;
/**< Bookmark icon pre-loaded. */
bool loaded; /**< True if content has been loaded. */
{
TRACE;
view->addBookmark(note);
+#ifdef Q_WS_MAEMO_5
+ QMaemo5InformationBox::information(this,
+ tr("Bookmarked current position"), QMaemo5InformationBox::DefaultTimeout);
+#else
+ (void)QMessageBox::information(this, tr("Dorian"),
+ tr("Bookmarked current position"), QMessageBox::Ok);
+#endif // Q_WS_MAEMO_5}
}
void MainWindow::onGoToBookmark(int index)
Book *book = Library::instance()->book(mCurrent);
if (book) {
- int partIndex = book->partFromChapter(index);
+ QString fragment;
+ int partIndex = book->partFromChapter(index, fragment);
if (partIndex != -1) {
- view->goToBookmark(Book::Bookmark(partIndex, 0));
+ view->goToPart(partIndex, fragment);
}
}
}
label->setText(tr("<b>Dorian %1</b><br><br>Copyright © 2010 "
"Akos Polster <akos@pipacs.com><br>"
"Licensed under GNU General Public License, Version 3<br>"
- "Source code: <a href='https://garage.maemo.org/projects/dorian/'>"
+ "Source code:<br><a href='https://garage.maemo.org/projects/dorian/'>"
"garage.maemo.org/projects/dorian</a>").arg(Platform::version()));
aboutDialog->addWidget(label);
aboutDialog->addStretch();
return ret;
}
-int Book::partFromChapter(int index)
+int Book::partFromChapter(int index, QString &fragment)
{
Trace t("Book::partFromChapter");
+ fragment.clear();
QString id = chapters[index];
QString href = content[id].href;
int hashPos = href.indexOf("#");
if (hashPos != -1) {
+ fragment = href.mid(hashPos);
href = href.left(hashPos);
}
qDebug() << "Chapter" << index;
qDebug() << " id" << id;
qDebug() << " href" << href;
+ qDebug() << " fragment" << fragment;
for (int i = 0; i < parts.size(); i++) {
QString partId = parts[i];
/** Get chapter index from part index. */
int chapterFromPart(int index);
- /** Get part index from chapter index. */
- int partFromChapter(int index);
+ /** Get part index and URL fragment from chapter index. */
+ int partFromChapter(int index, QString &fragment);
/** Get progress (0..1) corresponding to part index and part position. */
qreal getProgress(int part, qreal position);
dorian (0.3.3-1) unstable; urgency=low
* Fix font scaling on Symbian
+ * Jump to the exact position on page, as described in TOC
-- Akos Polster <akos@pipacs.com> Wed, 3 Nov 2010 02:00:00 +0100