Fix forward navigation control on Linux.
[dorian] / bookview.h
index 30af1f9..9a177e6 100644 (file)
 
 #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
@@ -22,22 +28,43 @@ 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);
+
+    /** Add bookmark to book at the current position. */
     void addBookmark(const QString &note);
-    void setLastBookmark();
-    void restoreLastBookmark();
+
+    /** 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);
@@ -49,34 +76,41 @@ public slots:
     /** 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);
-#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);
+    void hideEvent(QHideEvent *e);
 
-private:
     /** Load given part. */
     void loadContent(int index);
 
@@ -89,10 +123,11 @@ private:
     /** Show reading progress. */
     void showProgress();
 
+private:
     int contentIndex;   /**< Current part in book. */
     Book *mBook;        /**< Book to show. */
     bool restorePositionAfterLoad;
-                        /**< If true, restore current position after load. */
+                        /**< If true, restore reading position after load. */
     qreal positionAfterLoad;
                         /**< Position to be restored after load. */
     bool restoreFragmentAfterLoad;
@@ -101,14 +136,24 @@ private:
                         /**< 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