#include "book.h"
+#ifdef Q_OS_SYMBIAN
+# include "mediakeysobserver.h"
+#endif
+
class QModelIndex;
class Progress;
class QAbstractKineticScroller;
+class ProgressDialog;
+class FlickCharm;
+class QTimer;
/** Visual representation of a book. */
class BookView: public QWebView
public:
explicit BookView(QWidget *parent = 0);
- virtual ~BookView();
+
+ /** Set current book. */
void setBook(Book *book);
+
+ /** Get current book. */
Book *book();
+
+ /** Go to the position decribed by "bookmark". */
void goToBookmark(const Book::Bookmark &bookmark);
- void addBookmark();
- void setLastBookmark();
- void restoreLastBookmark();
+
+ /** Add bookmark to book at the current position. */
+ void addBookmark(const QString ¬e);
+
+ /** Save current reading position into book. */
+ void setLastBookmark(bool fast = false);
+
+ /** Go to given part + part fragment URL. */
+ void goToPart(int part, const QString &fragment);
+
+ /** Go to given fragment URL in current part. */
+ void goToFragment(const QString &fragment);
+
+ /** If grab is true, volume keys will generate act as page up/down. */
+ void grabVolumeKeys(bool grab);
+
+ /** Schedule restoring last reading position after loading part. */
+ void scheduleRestoreAfterLoad();
+
+ /** Schedule restoring last reading position. */
+ void scheduleRestoreLastBookmark();
signals:
+ /** Part loading started. */
void partLoadStart(int index);
- void partLoadEnd(int index);
- /** Signal button press when the real event has been suppressed. */
- void suppressedMouseButtonPress();
+ /** Part loading finished. */
+ void partLoadEnd(int index);
/** Signal progress in reading the book. */
void progress(qreal p);
/** Go to previous part. */
void goNext();
+ /** Actions to perform after URL loading finished. */
void onLoadFinished(bool ok);
+
+ /** Handle settings changes. */
void onSettingsChanged(const QString &key);
/** Add QObjects to the main frame. */
void addJavaScriptObjects();
- /** Handle main frame contents size changes. */
- void onContentsSizeChanged(const QSize &size);
-
/** Go to previous page. */
void goPreviousPage();
/** Go to next page. */
void goNextPage();
+protected slots:
+ /** Restore last reading position after part loading finished. */
+ void restoreAfterLoad();
+
+ /** Restore book's last reading position, load new part if needed. */
+ void restoreLastBookmark();
+
+#ifdef Q_OS_SYMBIAN
+ /** Observe media keys. */
+ void onMediaKeysPressed(MediaKeysObserver::MediaKeys key);
+#endif
+
protected:
void paintEvent(QPaintEvent *e);
void mousePressEvent(QMouseEvent *e);
void wheelEvent(QWheelEvent *);
bool eventFilter(QObject *o, QEvent *e);
- void leaveEvent(QEvent *e);
- void enterEvent(QEvent *e);
void timerEvent(QTimerEvent *e);
- void keyPressEvent(QKeyEvent *e);
+ void hideEvent(QHideEvent *e);
-private:
/** Load given part. */
void loadContent(int index);
/** Go to a given (relative) position in current part. */
void goToPosition(qreal position);
- /** Show progress. */
+ /** Show reading progress. */
void showProgress();
+private:
int contentIndex; /**< Current part in book. */
Book *mBook; /**< Book to show. */
bool restorePositionAfterLoad;
- /**< If true, restoring position after load is needed. */
+ /**< If true, restore reading 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. */
- bool mousePressed;
- int contentsHeight; /**< Last know height of the frame. */
+ bool loaded; /**< True, if content has been loaded. */
+ bool mousePressed; /**< Event filter's mouse button state. */
+ bool grabbingVolumeKeys;
+ /**< True, if volume keys should be grabbed. */
+ QTimer *restoreTimer;
+ /**< Single timer for scheduling all restore ops. */
+
+#if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN)
+ int scrollerMonitor;/**< ID of timer monitoring kinetic scroll. */
+#endif
#if defined(Q_WS_MAEMO_5)
- int scrollerMonitor;
QAbstractKineticScroller *scroller;
#endif
+
+#if defined(Q_OS_SYMBIAN)
+ FlickCharm *charm; /**< Kinetic scroller. */
+#endif
};
#endif // BOOKVIEW_H