[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