nodeeditor_doxy
|
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