api for setting/unsetting bookmarks

This commit is contained in:
Marco Martin 2012-08-01 18:14:12 +02:00
parent e5a77cc8c7
commit adabbf5fb5
2 changed files with 52 additions and 2 deletions

View file

@ -24,9 +24,10 @@
#include <QTimer>
#include <QStyleOptionGraphicsItem>
#include <core/bookmarkmanager.h>
#include <core/document.h>
#include <core/page.h>
#include <core/generator.h>
#include <core/page.h>
#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"

View file

@ -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<DocumentItem> m_documentItem;
QTimer *m_redrawTimer;
int m_observerId;