[kgraphviewer-devel] [KGraphViewer/libkgraphviz] 0eeae12: Introduce CanvasElementPrivate

Kevin Funk krf at electrostorm.net
Wed Dec 15 15:41:51 CET 2010


	A	 src/kgraphviz/canvaselement_p.h	 [License: UNKNOWN]

commit 0eeae12caa43ecdfd3887dbee762d65419fa3704
Author: Kevin Funk <krf at electrostorm.net>
Date:   Wed Dec 15 14:33:30 2010 +0100

    Introduce CanvasElementPrivate
    
    * Cleanup canvaselement.h
    * Introduce pimpl idiom here

diff --git a/src/kgraphviz/canvaselement.cpp b/src/kgraphviz/canvaselement.cpp
index 91a50bf..3271c9d 100644
--- a/src/kgraphviz/canvaselement.cpp
+++ b/src/kgraphviz/canvaselement.cpp
@@ -16,8 +16,9 @@
    02110-1301, USA
 */
 
-
 #include "canvaselement.h"
+#include "canvaselement_p.h"
+
 #include "dotgraphview.h"
 #include "graphelement.h"
 #include "support/dotdefaults.h"
@@ -39,56 +40,68 @@
 
 using namespace KGraphViz;
 
+CanvasElementPrivate::CanvasElementPrivate() :
+  m_scaleX(0), m_scaleY(0),
+  m_xMargin(0), m_yMargin(0), m_gh(0), m_wdhcf(0), m_hdvcf(0),
+  m_font(0),
+  m_popup(new QMenu()),
+  m_hovered(false)
+{
+}
+
+CanvasElementPrivate::~CanvasElementPrivate()
+{
+}
+
 CanvasElement::CanvasElement(
                               DotGraphView* v,
                               GraphElement* gelement,
                               QGraphicsScene* c,
                               QGraphicsItem* parent
                             )
-  : QObject(), QAbstractGraphicsShapeItem(parent),
-    m_scaleX(0), m_scaleY(0),
-    m_xMargin(0), m_yMargin(0), m_gh(0), m_wdhcf(0), m_hdvcf(0),
-    m_element(gelement), m_view(v),
-    m_font(0),
-    m_pen(Dot2QtConsts::componentData().qtColor(gelement->fontColor())),
-    m_popup(new QMenu()),
-    m_hovered(false)
+  : QAbstractGraphicsShapeItem(parent)
+  , d_ptr(new CanvasElementPrivate)
 {
+  Q_D(CanvasElement);
+  d->m_element = gelement;
+  d->m_view = v;
+  d->m_pen = Dot2QtConsts::componentData().qtColor(gelement->fontColor());
+  
 //   kDebug();
-  m_font = FontsCache::changeable().fromName(gelement->fontName());
+  d->m_font = FontsCache::changeable().fromName(gelement->fontName());
 /*  kDebug() << "Creating CanvasElement for "<<gelement->id();
   kDebug() << "    data: " << wdhcf << "," << hdvcf << "," << gh << "," 
     << scaleX << "," << scaleY << "," << xMargin << "," << yMargin << endl;*/
   
   if (element()->style() == "bold")
   {
-    m_pen.setStyle(Qt::SolidLine);
-    m_pen.setWidth(int(2*((m_scaleX+m_scaleY)/2)));
+    d->m_pen.setStyle(Qt::SolidLine);
+    d->m_pen.setWidth(int(2*((d->m_scaleX+d->m_scaleY)/2)));
   }
   else if (element()->style() != "filled")
   {
-    m_pen.setStyle(Dot2QtConsts::componentData().qtPenStyle(m_element->style()));
-    m_pen.setWidth(int((m_scaleX+m_scaleY)/2));
+    d->m_pen.setStyle(Dot2QtConsts::componentData().qtPenStyle(d->m_element->style()));
+    d->m_pen.setWidth(int((d->m_scaleX+d->m_scaleY)/2));
     if (element()->style().left(12) == "setlinewidth")
     {
       bool ok;
-      uint lineWidth = element()->style().mid(13, m_element->style().length()-1-13).toInt(&ok);
-      m_pen.setWidth(lineWidth * int((m_scaleX+m_scaleY)/2));
+      uint lineWidth = element()->style().mid(13, d->m_element->style().length()-1-13).toInt(&ok);
+      d->m_pen.setWidth(lineWidth * int((d->m_scaleX+d->m_scaleY)/2));
     }
   }
-  if (m_element->style() == "filled")
+  if (d->m_element->style() == "filled")
   {
-    m_brush = Dot2QtConsts::componentData().qtColor(element()->backColor());
+    d->m_brush = Dot2QtConsts::componentData().qtColor(element()->backColor());
 //     QCanvasPolygon::drawShape(p);
   }
   else
   {
-    m_brush = c->backgroundBrush();
+    d->m_brush = c->backgroundBrush();
   }
   
   // the message should be given (or possible to be given) by the part user
   KAction* removeElementAction = new KAction(i18n("Remove selected element(s)"), this);
-  m_popup->addAction(removeElementAction);
+  d->m_popup->addAction(removeElementAction);
   connect(removeElementAction,SIGNAL(triggered(bool)),this,SLOT(slotRemoveElement()));
 
   connect(this, SIGNAL(selected(CanvasElement*, Qt::KeyboardModifiers)), v, SLOT(slotElementSelected(CanvasElement*, Qt::KeyboardModifiers)));
@@ -104,14 +117,29 @@ CanvasElement::CanvasElement(
 
 CanvasElement::~CanvasElement()
 {
-  delete m_popup;
+  Q_D(CanvasElement);
+  delete d->m_popup;
+  delete d_ptr;
+}
+
+GraphElement* CanvasElement::element() const
+{
+  Q_D(const CanvasElement);
+  return d->m_element;
+}
+
+void CanvasElement::setGh(qreal gh)
+{
+  Q_D(CanvasElement);
+  d->m_gh = gh;
 }
 
 void CanvasElement::modelChanged()
 {
+  Q_D(CanvasElement);
   kDebug() ;//<< id();
-  m_pen = QPen(Dot2QtConsts::componentData().qtColor(m_element->fontColor()));
-  m_font = FontsCache::changeable().fromName(m_element->fontName());
+  d->m_pen = QPen(Dot2QtConsts::componentData().qtColor(d->m_element->fontColor()));
+  d->m_font = FontsCache::changeable().fromName(d->m_element->fontName());
   prepareGeometryChange();
   computeBoundingRect();
 }
@@ -120,27 +148,30 @@ void CanvasElement::initialize(qreal scaleX, qreal scaleY,
                             qreal xMargin, qreal yMargin, qreal gh,
                             qreal wdhcf, qreal hdvcf)
 {
-//   kDebug();
+  Q_D(CanvasElement);
+  kDebug();
   setFlag(QGraphicsItem::ItemIsMovable, true);
   setFlag(QGraphicsItem::ItemIsSelectable, true);
 
-  m_scaleX = scaleX; m_scaleY = scaleY;
-  m_xMargin = xMargin; m_yMargin = yMargin;
-//   m_gh = gh;
-  m_wdhcf = wdhcf; m_hdvcf = hdvcf;
+  d->m_scaleX = scaleX; d->m_scaleY = scaleY;
+  d->m_xMargin = xMargin; d->m_yMargin = yMargin;
+//   d->m_gh = gh;
+  d->m_wdhcf = wdhcf; d->m_hdvcf = hdvcf;
 
-  setZValue(m_element->z());
+  setZValue(d->m_element->z());
 
   computeBoundingRect();
 }
 
 QRectF CanvasElement::boundingRect () const
 {
-  return m_boundingRect;
+  Q_D(const CanvasElement);
+  return d->m_boundingRect;
 }
 
 void CanvasElement::computeBoundingRect()
 {
+  Q_D(CanvasElement);
 //   kDebug() << element();
   kDebug() << element()->id() << zValue();
   
@@ -149,8 +180,8 @@ void CanvasElement::computeBoundingRect()
   if (element()->renderOperations().isEmpty())
   {
     kDebug() << "no render operation";
-    rect = QRectF(0,0,(m_view->defaultNewElementPixmap().size().width())*m_scaleX,(m_view->defaultNewElementPixmap().size().height())*m_scaleY);
-    m_boundingRect = rect;
+    rect = QRectF(0,0,(d->m_view->defaultNewElementPixmap().size().width())*d->m_scaleX,(d->m_view->defaultNewElementPixmap().size().height())*d->m_scaleY);
+    d->m_boundingRect = rect;
   }
   else
   {
@@ -170,13 +201,13 @@ void CanvasElement::computeBoundingRect()
 
       if ((*it).renderop == "e" || (*it).renderop == "E")
       {
-//         kDebug() << "integers[0]=" << (*it).integers[0] << "; m_wdhcf=" << m_wdhcf
-//             << "(*it).integers[0]/*%m_wdhcf*/=" << (*it).integers[0]/*%m_wdhcf*/;
-        qreal w = m_scaleX * (*it).integers[2] * 2;
-        qreal h = m_scaleY * (*it).integers[3] * 2;
-        qreal x = m_xMargin + (((*it).integers[0]/*%m_wdhcf*/)*m_scaleX) - w/2;
-        qreal y = ((m_gh - (*it).integers[1]/*%m_hdvcf*/)*m_scaleY) + m_yMargin - h/2;
-        m_boundingRect = QRectF(x - adjust,y - adjust, w + adjust, h + adjust);
+//         kDebug() << "integers[0]=" << (*it).integers[0] << "; d->m_wdhcf=" << d->m_wdhcf
+//             << "(*it).integers[0]/*%d->m_wdhcf*/=" << (*it).integers[0]/*%d->m_wdhcf*/;
+        qreal w = d->m_scaleX * (*it).integers[2] * 2;
+        qreal h = d->m_scaleY * (*it).integers[3] * 2;
+        qreal x = d->m_xMargin + (((*it).integers[0]/*%d->m_wdhcf*/)*d->m_scaleX) - w/2;
+        qreal y = ((d->m_gh - (*it).integers[1]/*%d->m_hdvcf*/)*d->m_scaleY) + d->m_yMargin - h/2;
+        d->m_boundingRect = QRectF(x - adjust,y - adjust, w + adjust, h + adjust);
 //         kDebug() << "'" << element()->id() << "' set rect for ellipse to " << rect;
       }
       else if  ((*it).renderop == "p" || (*it).renderop == "P")
@@ -185,18 +216,18 @@ void CanvasElement::computeBoundingRect()
         for (int i = 0; i < (*it).integers[0]; i++)
         {
           qreal x,y;
-          x = ((*it).integers[2*i+1] == m_wdhcf)?(*it).integers[2*i+1]:(*it).integers[2*i+1]/*%m_wdhcf*/;
-          y = ((*it).integers[2*i+2] == m_hdvcf)?(*it).integers[2*i+2]:(*it).integers[2*i+2]/*%m_hdvcf*/;
+          x = ((*it).integers[2*i+1] == d->m_wdhcf)?(*it).integers[2*i+1]:(*it).integers[2*i+1]/*%d->m_wdhcf*/;
+          y = ((*it).integers[2*i+2] == d->m_hdvcf)?(*it).integers[2*i+2]:(*it).integers[2*i+2]/*%d->m_hdvcf*/;
           {
 
           }
           QPointF p(
-                    x*m_scaleX +m_xMargin,
-                    (m_gh-y)*m_scaleY + m_yMargin
+                    x*d->m_scaleX +d->m_xMargin,
+                    (d->m_gh-y)*d->m_scaleY + d->m_yMargin
                   );
           polygon[i] = p;
         }
-        m_boundingRect = polygon.boundingRect();
+        d->m_boundingRect = polygon.boundingRect();
 //         kDebug() << "'" << element()->id() << "' set rect for polygon to " << rect;
       }
     }
@@ -209,8 +240,11 @@ QWidget *widget)
 {
   Q_UNUSED(option)
   Q_UNUSED(widget)
+
+  Q_D(const CanvasElement);
+
   /// computes the scaling of line width
-  qreal widthScaleFactor = (m_scaleX+m_scaleY)/2;
+  qreal widthScaleFactor = (d->m_scaleX+d->m_scaleY)/2;
   if (widthScaleFactor < 1)
   {
     widthScaleFactor = 1;
@@ -229,7 +263,7 @@ QWidget *widget)
   }
 //   kDebug() << msg;
 
-  if (element()->renderOperations().isEmpty() && m_view->isReadWrite())
+  if (element()->renderOperations().isEmpty() && d->m_view->isReadWrite())
   {
     kError() << element()->id() << ": no render operation. This should not happen.";
     return;
@@ -240,7 +274,7 @@ QWidget *widget)
 
   QColor lineColor = Dot2QtConsts::componentData().qtColor(element()->lineColor());
   QColor backColor = Dot2QtConsts::componentData().qtColor(element()->backColor());
-  if (m_hovered && m_view->highlighting())
+  if (d->m_hovered && d->m_view->highlighting())
   {
     backColor = backColor.lighter();
   }
@@ -261,7 +295,7 @@ QWidget *widget)
       QColor c(dro.str.mid(0,7));
       bool ok;
       c.setAlpha(255-dro.str.mid(8).toInt(&ok,16));
-      if (m_hovered && m_view->highlighting())
+      if (d->m_hovered && d->m_view->highlighting())
       {
         c = c.lighter();
       }
@@ -271,10 +305,10 @@ QWidget *widget)
     else if (dro.renderop == "e" || dro.renderop == "E")
     {
       QPen pen = p->pen();
-      qreal w = m_scaleX * dro.integers[2] * 2;
-      qreal h = m_scaleY * dro.integers[3] * 2;
-      qreal x = m_xMargin + ((dro.integers[0]/*%m_wdhcf*/)*m_scaleX) - w/2;
-      qreal y = ((m_gh - dro.integers[1]/*%m_hdvcf*/)*m_scaleY) + m_yMargin - h/2;
+      qreal w = d->m_scaleX * dro.integers[2] * 2;
+      qreal h = d->m_scaleY * dro.integers[3] * 2;
+      qreal x = d->m_xMargin + ((dro.integers[0]/*%d->m_wdhcf*/)*d->m_scaleX) - w/2;
+      qreal y = ((d->m_gh - dro.integers[1]/*%d->m_hdvcf*/)*d->m_scaleY) + d->m_yMargin - h/2;
       QRectF rect(x,y,w,h);
       p->save();
       p->setBrush(backColor);
@@ -299,14 +333,14 @@ QWidget *widget)
       for (int i = 0; i < dro.integers[0]; i++)
       {
         qreal x,y;
-        x = (dro.integers[2*i+1] == m_wdhcf)?dro.integers[2*i+1]:dro.integers[2*i+1]/*%m_wdhcf*/;
-        y = (dro.integers[2*i+2] == m_hdvcf)?dro.integers[2*i+2]:dro.integers[2*i+2]/*%m_hdvcf*/;
+        x = (dro.integers[2*i+1] == d->m_wdhcf)?dro.integers[2*i+1]:dro.integers[2*i+1]/*%d->m_wdhcf*/;
+        y = (dro.integers[2*i+2] == d->m_hdvcf)?dro.integers[2*i+2]:dro.integers[2*i+2]/*%d->m_hdvcf*/;
         QPointF p(
-                  (x*m_scaleX) + m_xMargin,
-                  ((m_gh-y)*m_scaleY) + m_yMargin
+                  (x*d->m_scaleX) + d->m_xMargin,
+                  ((d->m_gh-y)*d->m_scaleY) + d->m_yMargin
                 );
 /*        kDebug() << "    point: (" << dro.integers[2*i+1] << ","
-                  << dro.integers[2*i+2] << ") " << m_wdhcf << "/" << m_hdvcf;*/
+                  << dro.integers[2*i+2] << ") " << d->m_wdhcf << "/" << d->m_hdvcf;*/
         points[i] = p;
       }
       p->save();
@@ -377,7 +411,7 @@ QWidget *widget)
       QColor c(dro.str.mid(0,7));
       bool ok;
       c.setAlpha(255-dro.str.mid(8).toInt(&ok,16));
-      if (m_hovered && m_view->highlighting())
+      if (d->m_hovered && d->m_view->highlighting())
       {
         c = c.lighter();
       }
@@ -391,11 +425,11 @@ QWidget *widget)
       for (int i = 0; i < dro.integers[0]; i++)
       {
         qreal x,y;
-        x = (dro.integers[2*i+1] == m_wdhcf)?dro.integers[2*i+1]:dro.integers[2*i+1]/*%m_wdhcf*/;
-        y = (dro.integers[2*i+2] == m_hdvcf)?dro.integers[2*i+2]:dro.integers[2*i+2]/*%m_hdvcf*/;
+        x = (dro.integers[2*i+1] == d->m_wdhcf)?dro.integers[2*i+1]:dro.integers[2*i+1]/*%d->m_wdhcf*/;
+        y = (dro.integers[2*i+2] == d->m_hdvcf)?dro.integers[2*i+2]:dro.integers[2*i+2]/*%d->m_hdvcf*/;
         QPointF p(
-                  (x*m_scaleX) +m_xMargin,
-                  ((m_gh-y)*m_scaleY) + m_yMargin
+                  (x*d->m_scaleX) +d->m_xMargin,
+                  ((d->m_gh-y)*d->m_scaleY) + d->m_yMargin
                 );
         points[i] = p;
       }
@@ -445,31 +479,31 @@ QWidget *widget)
 //         << " (" << element()->fontName() << ", " << element()->fontSize()
 //         << ", " << element()->fontColor() << ")";
 
-      int stringWidthGoal = int(dro.integers[3] * m_scaleX);
+      int stringWidthGoal = int(dro.integers[3] * d->m_scaleX);
       int fontSize = element()->fontSize();
 //       kDebug() << element()->id() << " initial fontSize " << fontSize;
-      m_font->setPointSize(fontSize);
-      QFontMetrics fm(*m_font);
+      d->m_font->setPointSize(fontSize);
+      QFontMetrics fm(*d->m_font);
       while (fm.width(dro.str) > stringWidthGoal && fontSize > 1)
       {
         fontSize--;
-        m_font->setPointSize(fontSize);
-        fm = QFontMetrics(*m_font);
+        d->m_font->setPointSize(fontSize);
+        fm = QFontMetrics(*d->m_font);
       }
       p->save();
-      p->setFont(*m_font);
-      QPen pen(m_pen);
+      p->setFont(*d->m_font);
+      QPen pen(d->m_pen);
       pen.setColor(element()->fontColor());
       p->setPen(pen);
-      qreal x = (m_scaleX *
+      qreal x = (d->m_scaleX *
                        (
                          (dro.integers[0])
                          + (((-dro.integers[2])*(fm.width(dro.str)))/2)
                          - ( (fm.width(dro.str))/2 )
                        )
                       )
-                      + m_xMargin;
-      qreal y = ((m_gh - (dro.integers[1]))*m_scaleY)+ m_yMargin;
+                      + d->m_xMargin;
+      qreal y = ((d->m_gh - (dro.integers[1]))*d->m_scaleY)+ d->m_yMargin;
       QPointF point(x,y);
 //       kDebug() << element()->id() << "drawText" << point << " " << fontSize;
       p->drawText(point, dro.str);
@@ -482,38 +516,39 @@ QWidget *widget)
     p->save();
     p->setBrush(Qt::black);
     p->setPen(Qt::black);
-    p->drawRect(QRectF(m_boundingRect.topLeft(),QSizeF(6,6)));
-    p->drawRect(QRectF(m_boundingRect.topRight()-QPointF(6,0),QSizeF(6,6)));
-    p->drawRect(QRectF(m_boundingRect.bottomLeft()-QPointF(0,6),QSizeF(6,6)));
-    p->drawRect(QRectF(m_boundingRect.bottomRight()-QPointF(6,6),QSizeF(6,6)));
+    p->drawRect(QRectF(d->m_boundingRect.topLeft(),QSizeF(6,6)));
+    p->drawRect(QRectF(d->m_boundingRect.topRight()-QPointF(6,0),QSizeF(6,6)));
+    p->drawRect(QRectF(d->m_boundingRect.bottomLeft()-QPointF(0,6),QSizeF(6,6)));
+    p->drawRect(QRectF(d->m_boundingRect.bottomRight()-QPointF(6,6),QSizeF(6,6)));
     p->restore();
   }
 }
 
 void CanvasElement::mousePressEvent(QGraphicsSceneMouseEvent* event)
 {
-  kDebug() << m_element->id() << boundingRect();
-  if (m_view->isReadOnly())
+  Q_D(CanvasElement);
+  kDebug() << d->m_element->id() << boundingRect();
+  if (d->m_view->isReadOnly())
   {
     return;
   }
-  if (m_view->editingMode() == DotGraphView::AddNewEdge)
+  if (d->m_view->editingMode() == DotGraphView::AddNewEdge)
   {
-    m_view->createNewEdgeDraftFrom(this);
+    d->m_view->createNewEdgeDraftFrom(this);
     return;
   }
-  else if (m_view->editingMode() == DotGraphView::DrawNewEdge)
+  else if (d->m_view->editingMode() == DotGraphView::DrawNewEdge)
   {
-    m_view->finishNewEdgeTo(this);
+    d->m_view->finishNewEdgeTo(this);
     return;
   }
 
   if (event->button() == Qt::LeftButton)
   {
-    m_element->setSelected(!m_element->isSelected());
-    if (m_element->isSelected())
+    d->m_element->setSelected(!d->m_element->isSelected());
+    if (d->m_element->isSelected())
     {
-      kDebug() << "Element selected:" << m_element->id() << m_element;
+      kDebug() << "Element selected:" << d->m_element->id() << d->m_element;
       emit(selected(this,event->modifiers()));
     }
     update();
@@ -521,16 +556,16 @@ void CanvasElement::mousePressEvent(QGraphicsSceneMouseEvent* event)
   else if (event->button() == Qt::RightButton)
   {
     // opens the selected edge contextual menu and if necessary select the edge
-    if (!m_element->isSelected())
+    if (!d->m_element->isSelected())
     {
-      m_element->setSelected(true);
+      d->m_element->setSelected(true);
       emit(selected(this,event->modifiers()));
       update();
     }
     
 //     kDebug() << "opens the contextual menu";
-//     m_popup->exec(event->screenPos());
-    emit(elementContextMenuEvent(m_element->id(), event->screenPos() ));
+//     d->m_popup->exec(event->screenPos());
+    emit(elementContextMenuEvent(d->m_element->id(), event->screenPos() ));
   }
 }
 
@@ -548,15 +583,17 @@ void CanvasElement::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
 
 void CanvasElement::slotRemoveElement()
 {
+  Q_D(CanvasElement);
   kDebug();
-  m_view->removeSelectedElements();
+  d->m_view->removeSelectedElements();
 }
 
 void CanvasElement::hoverEnterEvent( QGraphicsSceneHoverEvent * event )
 {
   Q_UNUSED(event)
+  Q_D(CanvasElement);
   kDebug() << "Element:" << element()->id();
-  m_hovered = true;
+  d->m_hovered = true;
   update();
   emit hoverEnter(this);
 }
@@ -564,8 +601,9 @@ void CanvasElement::hoverEnterEvent( QGraphicsSceneHoverEvent * event )
 void CanvasElement::hoverLeaveEvent( QGraphicsSceneHoverEvent * event )
 {
   Q_UNUSED(event)
+  Q_D(CanvasElement);
   kDebug() << "Element:" << element()->id();
-  m_hovered = false;
+  d->m_hovered = false;
   update();
   emit hoverLeave(this);
 }
diff --git a/src/kgraphviz/canvaselement.h b/src/kgraphviz/canvaselement.h
index 59df361..d1570be 100644
--- a/src/kgraphviz/canvaselement.h
+++ b/src/kgraphviz/canvaselement.h
@@ -24,15 +24,13 @@
 #define CANVAS_ELEMENT_H
 
 #include <QAbstractGraphicsShapeItem>
-#include <QPen>
-#include <QBrush>
 
-class QMenu;
 class QGraphicsScene;
 
 namespace KGraphViz
 {
 
+class CanvasElementPrivate;
 class GraphElement;
 class DotGraphView;
 
@@ -49,7 +47,7 @@ public:
       
   virtual ~CanvasElement();
   
-  GraphElement* element() { return m_element; }
+  GraphElement* element() const;
 
   virtual void paint(QPainter* p, const QStyleOptionGraphicsItem *option,
         QWidget *widget = 0 );
@@ -62,26 +60,14 @@ public:
                   qreal xMargin, qreal yMargin, qreal gh,
                   qreal wdhcf, qreal hdvcf);
 
-  inline void setGh(qreal gh) {m_gh = gh;}
-  
-  protected:
+  void setGh(qreal gh);
+
+protected:
   virtual void mouseMoveEvent ( QGraphicsSceneMouseEvent * event );
   virtual void mousePressEvent ( QGraphicsSceneMouseEvent * event );
   virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event );
   virtual void hoverEnterEvent ( QGraphicsSceneHoverEvent * event );
   virtual void hoverLeaveEvent( QGraphicsSceneHoverEvent * event );
-
-  qreal m_scaleX, m_scaleY;
-  qreal m_xMargin, m_yMargin, m_gh, m_wdhcf, m_hdvcf;
-  GraphElement* m_element;
-  DotGraphView* m_view;
-  QFont* m_font;
-  QPen m_pen;
-  QBrush m_brush;
-  QRectF m_boundingRect;
-  QMenu* m_popup;
-
-  bool m_hovered;
   
 Q_SIGNALS:
   void selected(CanvasElement*, Qt::KeyboardModifiers);
@@ -92,6 +78,10 @@ Q_SIGNALS:
 public Q_SLOTS:
   void modelChanged();
   void slotRemoveElement();
+
+private:
+  Q_DECLARE_PRIVATE(CanvasElement)
+  CanvasElementPrivate* const d_ptr;
 };
 
 }
diff --git a/src/kgraphviz/canvaselement_p.h b/src/kgraphviz/canvaselement_p.h
new file mode 100644
index 0000000..09b7b8c
--- /dev/null
+++ b/src/kgraphviz/canvaselement_p.h
@@ -0,0 +1,52 @@
+/*
+    Copyright (C) 2010 Kevin Funk <krf at electrostorm.net>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef CANVAS_ELEMENT_P_H
+#define CANVAS_ELEMENT_P_H
+
+#include "canvaselement.h"
+
+#include <QPen>
+#include <QBrush>
+
+namespace KGraphViz
+{
+
+class CanvasElementPrivate
+{
+public:
+  CanvasElementPrivate();
+  ~CanvasElementPrivate();
+
+  qreal m_scaleX, m_scaleY;
+  qreal m_xMargin, m_yMargin, m_gh, m_wdhcf, m_hdvcf;
+  GraphElement* m_element;
+  DotGraphView* m_view;
+  QFont* m_font;
+  QPen m_pen;
+  QBrush m_brush;
+  QRectF m_boundingRect;
+  QMenu* m_popup;
+
+  bool m_hovered;
+};
+
+}
+
+#endif
\ No newline at end of file


More information about the kgraphviewer-devel mailing list