[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [calligra/active-calligratouch-shantanu] qtquick: Update link handling for QtQuick components
From: Arjen Hiemstra <ahiemstra () heimr ! nl>
Date: 2013-05-31 16:58:27
Message-ID: 20130531165827.51E05A6067 () git ! kde ! org
[Download RAW message or body]
Git commit b3b8903c263971cedb50bf5d5c0598308ca7cd13 by Arjen Hiemstra.
Committed on 31/05/2013 at 18:56.
Pushed by ahiemstra into branch 'active-calligratouch-shantanu'.
Update link handling for QtQuick components
M +48 -6 qtquick/CQLinkArea.cpp
M +10 -0 qtquick/CQLinkArea.h
M +24 -26 qtquick/CQTextDocumentCanvas.cpp
http://commits.kde.org/calligra/b3b8903c263971cedb50bf5d5c0598308ca7cd13
diff --git a/qtquick/CQLinkArea.cpp b/qtquick/CQLinkArea.cpp
index 37ac286..eb31934 100644
--- a/qtquick/CQLinkArea.cpp
+++ b/qtquick/CQLinkArea.cpp
@@ -27,6 +27,10 @@ public:
bool clickInProgress;
QPointF clickLocation;
int wiggleFactor;
+
+ QSizeF sourceSize;
+
+ QColor linkColor;
};
CQLinkArea::CQLinkArea(QDeclarativeItem* parent)
@@ -46,12 +50,15 @@ CQLinkArea::~CQLinkArea()
void CQLinkArea::paint(QPainter* painter, const QStyleOptionGraphicsItem* , QWidget* \
) {
painter->save();
- QColor thing(Qt::black);
- thing.setAlpha(100);
- painter->setPen(thing);
+ painter->setPen(Qt::transparent);
+ painter->setBrush(QBrush(d->linkColor));
foreach(const LinkLayerLink& link, d->realLinks) {
- QRectF inverted(link.linkRect.y(), link.linkRect.x(), \
link.linkRect.height(), link.linkRect.width());
- painter->drawRect(inverted);
+ QRectF target(
+ (link.linkRect.y() / d->sourceSize.height()) * height(),
+ (link.linkRect.x() / d->sourceSize.width()) * width(),
+ (link.linkRect.height() / d->sourceSize.height()) * height(),
+ (link.linkRect.width() / d->sourceSize.width()) * width());
+ painter->drawRect(target);
}
painter->restore();
}
@@ -80,6 +87,35 @@ void CQLinkArea::setLinks(const QVariantList& newLinks)
emit linksChanged();
}
+QSizeF CQLinkArea::sourceSize() const
+{
+ return d->sourceSize;
+}
+
+void CQLinkArea::setSourceSize(const QSizeF& size)
+{
+ if(size != d->sourceSize) {
+ d->sourceSize = size;
+ emit sourceSizeChanged();
+ update();
+ }
+}
+
+QColor CQLinkArea::linkColor() const
+{
+ return d->linkColor;
+}
+
+void CQLinkArea::setLinkColor(const QColor& color)
+{
+ if(color != d->linkColor) {
+ d->linkColor = color;
+ d->linkColor.setAlphaF( 0.25 );
+ emit linkColorChanged();
+ update();
+ }
+}
+
void CQLinkArea::mousePressEvent(QGraphicsSceneMouseEvent* event)
{
d->clickInProgress = true;
@@ -97,7 +133,13 @@ void CQLinkArea::mouseReleaseEvent(QGraphicsSceneMouseEvent* \
event) QUrl url;
QPointF inverted(event->pos().y(), event->pos().x());
foreach(const LinkLayerLink& link, d->realLinks) {
- if(link.linkRect.contains(inverted)) {
+ QRectF scaledTarget(
+ (link.linkRect.x() / d->sourceSize.width()) * width(),
+ (link.linkRect.y() / d->sourceSize.height()) * height(),
+ (link.linkRect.width() / d->sourceSize.width()) * width(),
+ (link.linkRect.height() / d->sourceSize.height()) * height() );
+
+ if(scaledTarget.contains(inverted)) {
url = link.linkTarget;
break;
}
diff --git a/qtquick/CQLinkArea.h b/qtquick/CQLinkArea.h
index 6391d8c..8065af5 100644
--- a/qtquick/CQLinkArea.h
+++ b/qtquick/CQLinkArea.h
@@ -11,6 +11,8 @@ class CQLinkArea : public QDeclarativeItem
{
Q_OBJECT
Q_PROPERTY(QVariantList links READ links WRITE setLinks NOTIFY linksChanged)
+ Q_PROPERTY(QSizeF sourceSize READ sourceSize WRITE setSourceSize NOTIFY \
sourceSizeChanged) + Q_PROPERTY(QColor linkColor READ linkColor WRITE setLinkColor \
NOTIFY linkColorChanged)
public:
explicit CQLinkArea(QDeclarativeItem* parent = 0);
@@ -20,11 +22,19 @@ public:
QVariantList links() const;
void setLinks(const QVariantList& newLinks);
+ QSizeF sourceSize() const;
+ void setSourceSize( const QSizeF& size );
+
+ QColor linkColor() const;
+ void setLinkColor( const QColor& color );
+
Q_SIGNALS:
void linksChanged();
void clicked();
void doubleClicked();
void linkClicked(QUrl linkTarget);
+ void sourceSizeChanged();
+ void linkColorChanged();
protected:
virtual void mousePressEvent(QGraphicsSceneMouseEvent* event);
diff --git a/qtquick/CQTextDocumentCanvas.cpp b/qtquick/CQTextDocumentCanvas.cpp
index 698081e..2d9b80b 100644
--- a/qtquick/CQTextDocumentCanvas.cpp
+++ b/qtquick/CQTextDocumentCanvas.cpp
@@ -50,13 +50,13 @@ class CQTextDocumentCanvas::Private
{
public:
Private()
- : canvasBase(0),
+ : canvas(0),
findText(0),
documentModel(0),
document(0)
{}
- KoCanvasBase *canvasBase;
+ KWCanvasItem *canvas;
QString searchTerm;
KoFindText *findText;
CQTextDocumentModel *documentModel;
@@ -71,10 +71,10 @@ public:
qDeleteAll(linkTargets);
linkTargets.clear();
- KWCanvasItem *kwCanvasItem = dynamic_cast<KWCanvasItem*>(canvasBase);
- if(!kwCanvasItem)
+ if(!canvas)
return;
- foreach(const KoShape* shape, kwCanvasItem->shapeManager()->shapes()) {
+
+ foreach(const KoShape* shape, canvas->shapeManager()->shapes()) {
if(!shape->hyperLink().isEmpty()) {
QObject * obj = new QObject(documentModel);
obj->setProperty("linkRect", shape->boundingRect());
@@ -98,7 +98,7 @@ public:
QRectF rect = getFragmentPosition(block, fragment);
KWPage page = \
document->pageManager()->page(rect.left());
rect.translate(page.topMargin(), page.rightMargin());
- rect = \
canvasBase->viewConverter()->documentToView(rect); + rect \
= canvas->viewMode()->documentToView(rect, canvas->viewConverter());
rect.moveLeft(rect.left() - (page.pageNumber() * 8) + \
28); obj->setProperty("linkRect", rect);
obj->setProperty("linkTarget", \
QUrl(format.anchorHref())); @@ -160,12 +160,12 @@ void \
CQTextDocumentCanvas::openFile(const QString& uri) \
document->setCheckAutoSaveFile(false); document->openUrl(KUrl(uri));
- d->canvasBase = dynamic_cast<KoCanvasBase*> (part->canvasItem());
- createAndSetCanvasControllerOn(d->canvasBase);
- createAndSetZoomController(d->canvasBase);
+ d->canvas = dynamic_cast<KWCanvasItem*> (part->canvasItem());
+ createAndSetCanvasControllerOn(d->canvas);
+ createAndSetZoomController(d->canvas);
updateZoomControllerAccordingToDocument(document);
- QGraphicsWidget *graphicsWidget = dynamic_cast<QGraphicsWidget*>(d->canvasBase);
+ QGraphicsWidget *graphicsWidget = dynamic_cast<QGraphicsWidget*>(d->canvas);
graphicsWidget->setParentItem(this);
graphicsWidget->installEventFilter(this);
graphicsWidget->setVisible(true);
@@ -175,13 +175,12 @@ void CQTextDocumentCanvas::openFile(const QString& uri)
gotoPage(d->pageNumber, document);
}
- KWCanvasItem *kwCanvasItem = dynamic_cast<KWCanvasItem*>(d->canvasBase);
QList<QTextDocument*> texts;
- KoFindText::findTextInShapes(kwCanvasItem ->shapeManager()->shapes(), texts);
+ KoFindText::findTextInShapes(d->canvas->shapeManager()->shapes(), texts);
d->findText->setDocuments(texts);
d->document = static_cast<KWDocument*>(document);
- d->documentModel = new CQTextDocumentModel(this, d->document, \
kwCanvasItem->shapeManager()); + d->documentModel = new CQTextDocumentModel(this, \
d->document, d->canvas->shapeManager()); emit documentModelChanged();
d->updateLinkTargets();
@@ -194,8 +193,8 @@ void CQTextDocumentCanvas::gotoPage(int pageNumber, KoDocument \
*document) const KWDocument *kwDoc = static_cast<const KWDocument*>(document);
KWPage currentTextDocPage = kwDoc->pageManager()->page(pageNumber);
- QRectF rect = d->canvasBase->viewConverter()->documentToView(currentTextDocPage.rect());
- canvasController()->pan(rect.topLeft().toPoint() - \
d->canvasBase->viewConverter()->documentToView(canvasController()->documentOffset()).toPoint());
+ QRectF rect = d->canvas->viewConverter()->documentToView(currentTextDocPage.rect());
+ canvasController()->pan(rect.topLeft().toPoint() - \
d->canvas->viewConverter()->documentToView(canvasController()->documentOffset()).toPoint());
alignTopWith(rect.top());
updateCanvas();
}
@@ -205,11 +204,10 @@ int CQTextDocumentCanvas::cameraY() const
return d->currentPoint.y();
}
-qreal CQTextDocumentCanvas::pagePosition(int page)
+qreal CQTextDocumentCanvas::pagePosition(int pageIndex)
{
- KWPage realPage = d->document->pageManager()->page(page);
- KWCanvasItem *kwCanvasItem = dynamic_cast<KWCanvasItem*>(d->canvasBase);
- return kwCanvasItem->viewMode()->documentToView(realPage.rect().topLeft(), \
kwCanvasItem->viewConverter()).y(); + KWPage page = \
d->document->pageManager()->page(pageIndex); + return \
d->canvas->viewMode()->documentToView(page.rect().topLeft(), \
d->canvas->viewConverter()).y(); }
void CQTextDocumentCanvas::setCameraY(int cameraY)
@@ -244,13 +242,13 @@ void CQTextDocumentCanvas::render(QPainter* painter, const \
QRectF& target) QStyleOptionGraphicsItem option;
option.exposedRect = target;
option.rect = target.toAlignedRect();
- d->canvasBase->canvasItem()->paint(painter, &option);
+ d->canvas->canvasItem()->paint(painter, &option);
}
void CQTextDocumentCanvas::geometryChanged(const QRectF& newGeometry, const QRectF& \
oldGeometry) {
- if (d->canvasBase) {
- QGraphicsWidget *widget = dynamic_cast<QGraphicsWidget*>(d->canvasBase);
+ if (d->canvas) {
+ QGraphicsWidget *widget = dynamic_cast<QGraphicsWidget*>(d->canvas);
if (widget) {
widget->setGeometry(newGeometry);
}
@@ -302,10 +300,10 @@ void CQTextDocumentCanvas::setSearchTerm(const QString& term)
void CQTextDocumentCanvas::findMatchFound(const KoFindMatch &match)
{
QTextCursor cursor = match.location().value<QTextCursor>();
- d->canvasBase->canvasItem()->update();
+ d->canvas->canvasItem()->update();
- d->canvasBase->resourceManager()->setResource (KoText::CurrentTextAnchor, \
cursor.anchor());
- d->canvasBase->resourceManager()->setResource (KoText::CurrentTextPosition, \
cursor.position()); + d->canvas->resourceManager()->setResource \
(KoText::CurrentTextAnchor, cursor.anchor()); + \
d->canvas->resourceManager()->setResource (KoText::CurrentTextPosition, \
cursor.position()); }
void CQTextDocumentCanvas::findNoMatchFound()
@@ -315,7 +313,7 @@ void CQTextDocumentCanvas::findNoMatchFound()
void CQTextDocumentCanvas::updateCanvas()
{
- KWCanvasItem* kwCanvasItem = dynamic_cast<KWCanvasItem*> (d->canvasBase);
+ KWCanvasItem* kwCanvasItem = dynamic_cast<KWCanvasItem*> (d->canvas);
kwCanvasItem->update();
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic