From adabbf5fb505fecb22532507e9027824ce70b689 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Wed, 1 Aug 2012 18:14:12 +0200 Subject: [PATCH] api for setting/unsetting bookmarks --- active/components/pageitem.cpp | 47 ++++++++++++++++++++++++++++++++-- active/components/pageitem.h | 7 +++++ 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/active/components/pageitem.cpp b/active/components/pageitem.cpp index 7ca7faad5..9a7e4a802 100644 --- a/active/components/pageitem.cpp +++ b/active/components/pageitem.cpp @@ -24,9 +24,10 @@ #include #include +#include #include -#include #include +#include #include "pagepainter.h" #include "settings.h" @@ -39,7 +40,8 @@ PageItem::PageItem(QDeclarativeItem *parent) m_page(0), m_pageNumber(0), m_smooth(false), - m_intentionalDraw(true) + m_intentionalDraw(true), + m_bookmarked(false) { m_observerId = PAGEVIEW_ID; setFlag(QGraphicsItem::ItemHasNoContents, false); @@ -66,9 +68,12 @@ void PageItem::setDocument(DocumentItem *doc) } m_page = 0; + disconnect(doc, 0, this, 0); m_documentItem = doc; Observer *observer = m_documentItem.data()->observerFor(m_observerId); connect(observer, SIGNAL(pageChanged(int, int)), this, SLOT(pageHasChanged(int, int))); + connect(doc->document(), SIGNAL(bookmarksChanged(KUrl)), + this, SLOT(checkBookmarksChanged())); setPageNumber(0); emit documentChanged(); m_redrawTimer->start(REDRAW_TIMEOUT); @@ -95,6 +100,7 @@ void PageItem::setPageNumber(int number) emit pageNumberChanged(); emit implicitWidthChanged(); emit implicitHeightChanged(); + checkBookmarksChanged(); m_redrawTimer->start(REDRAW_TIMEOUT); } @@ -128,6 +134,30 @@ bool PageItem::smooth() const return m_smooth; } +bool PageItem::isBookmarked() +{ + return m_bookmarked; +} + +void PageItem::setBookmarked(bool bookmarked) +{ + if (!m_documentItem) { + return; + } + + if (bookmarked == m_bookmarked) { + return; + } + + if (bookmarked) { + m_documentItem.data()->document()->bookmarkManager()->addBookmark(m_pageNumber); + } else { + m_documentItem.data()->document()->bookmarkManager()->removeBookmark(m_pageNumber); + } + m_bookmarked = bookmarked; + emit bookmarkedChanged(); +} + //Reimplemented void PageItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) @@ -192,4 +222,17 @@ void PageItem::pageHasChanged( int page, int flags ) } } +void PageItem::checkBookmarksChanged() +{ + if (!m_documentItem) { + return; + } + + bool newBookmarked = m_documentItem.data()->document()->bookmarkManager()->isBookmarked(m_pageNumber); + if (m_bookmarked != newBookmarked) { + m_bookmarked = newBookmarked; + emit bookmarkedChanged(); + } +} + #include "pageitem.moc" diff --git a/active/components/pageitem.h b/active/components/pageitem.h index 93f3bb741..aaf7e9b52 100644 --- a/active/components/pageitem.h +++ b/active/components/pageitem.h @@ -42,6 +42,7 @@ class PageItem : public QDeclarativeItem, public Okular::View Q_PROPERTY(bool smooth READ smooth WRITE setSmooth) Q_PROPERTY(int implicitWidth READ implicitWidth NOTIFY implicitWidthChanged) Q_PROPERTY(int implicitHeight READ implicitHeight NOTIFY implicitHeightChanged) + Q_PROPERTY(bool bookmarked READ isBookmarked WRITE setBookmarked NOTIFY bookmarkedChanged) public: @@ -61,6 +62,9 @@ public: bool smooth() const; void setSmooth(bool smooth); + bool isBookmarked(); + void setBookmarked(bool bookmarked); + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); // inherited from View @@ -72,18 +76,21 @@ public: private Q_SLOTS: void delayedRedraw(); void pageHasChanged(int page, int flags); + void checkBookmarksChanged(); Q_SIGNALS: void implicitWidthChanged(); void implicitHeightChanged(); void documentChanged(); void pageNumberChanged(); + void bookmarkedChanged(); private: const Okular::Page *m_page; int m_pageNumber; bool m_smooth; bool m_intentionalDraw; + bool m_bookmarked; QWeakPointer m_documentItem; QTimer *m_redrawTimer; int m_observerId;