nodeeditor_doxy
src/Core/NodeConnectorGraphicsBase.h
Go to the documentation of this file.
00001 //dw
00002 #ifndef NodeConnectorGraphicsBase_H
00003 #define NodeConnectorGraphicsBase_H
00004 
00005 
00006 class NodeItemBase;
00007 class NodeConnectorBase;
00008 
00010 //template <class NodeConnectorClass>
00011 class NodeConnectorGraphicsBase
00012 {
00013 
00014 public:
00015         virtual GraphicsItem* graphicsItem() = 0;
00016         NodeConnectorGraphicsBase(NodeConnectorBase* parentNodeConnector = 0) : mpParentNodeConnector(parentNodeConnector)  {}
00017 
00018 protected:
00019         NodeConnectorBase* mpParentNodeConnector;
00020         virtual void setNodeConnectorParent(NodeConnectorBase* parent) {
00021                 mpParentNodeConnector = parent;
00022         }
00023 
00024         virtual void updateConnectorPosition(QPointF preferedPosition) {
00025                 if (mpParentNodeConnector && graphicsItem())
00026                         QPointF oldPos = graphicsItem().pos();
00027                         QPointF newPos(preferedPosition);
00028                         if (mpParentNodeConnector->parentNodeItem() && mpParentNodeConnector->parentNodeItem()->nodeItemGraphics() && mpParentNodeConnector->parentNodeItem()->nodeItemGraphics()->graphicsItem()) {
00029                                 //mpParentNodeConnector
00030                                 QGraphicsItem* itemGI = mpParentNodeConnector->parentNodeItem()->nodeItemGraphics()->graphicsItem();
00031                                 QRectF itemRect(itemGI->boundingRect());
00032                                 QRectF conRect();
00033                                 conRect = graphicsItem()->boundingRect();
00034 
00035                                 if (ConnectorFlags & allignLeft) {
00036                                         newPos.setX(-conRect.width()/2.0);
00037                                 }
00038                                 else if (ConnectorFlags & allignRight) {
00039                                         newPos.setX(itemRect.width() + conRect.width()/2.0);
00040                                 }
00041                                 else if (ConnectorFlags & allignTop) {
00042                                         newPos.setY(-conRect.height()/2.0);
00043                                 }
00044                                 else if (ConnectorFlags & allignBottom) {
00045                                         newPos.setY(itemRect.height() + conRect.height()/2.0);
00046                                 }
00047                         }
00048 
00049                         if (oldPos != newPos) {
00050                                 graphicsItem()->setPos(newPos);
00051                                 updateConnectionPositions();
00052                         }
00053                 }
00054                 //else no parent node item
00055         };
00056 
00057         virtual void updateConnectionPositions() {
00058                 foreach(NodeConnectionBase* c: mConnections) {
00059                         c->updateConnectionPosition();
00060                 }
00061         };
00062 
00063 
00064 };
00065 
00066 #endif