nodeeditor_doxy
|
00001 //dw 00002 #ifndef NodeItemBase_H 00003 #define NodeItemBase_H 00004 00005 00006 #include <QList> 00007 //dw 00008 #include <QObject> 00009 #include <QGraphicsObject> 00010 #include <QGraphicsItem.h> 00011 #include "NodeConnectorBase.h" 00012 #include "NodeItemGraphicsBase.h" 00013 00014 class NodeConnectorBase; 00015 class NodeItemGraphicsBase; 00016 00017 typedef QList<NodeConnectorBase*> ConnectorList; 00018 00020 //template <class NodeConnectorClass> 00021 class NodeItemBase: public QObject 00022 { 00023 Q_OBJECT 00024 00025 signals: 00026 void connectorAdded(NodeConnectorBase* nc); 00027 void connectorDeleted(NodeConnectorBase* nc); 00028 void connectionAdded(NodeConnectionBase* nconn); 00029 void connectionDeleted(NodeConnectionBase* nconn); 00030 00031 public: 00032 Q_PROPERTY(ConnectorContainer connectors READ connectors) 00033 Q_PROPERTY(NodeItemGraphicsBase* graphicsItem READ graphicsItem) 00034 protected: 00035 ConnectorList mNodeConnectors; 00036 NodeItemGrapicsBase* mpNodeItemGraphics; 00037 virtual NodeItemGrapicsBase* nodeItemGraphics(); 00038 00039 public: 00040 NodeItemBase(QObect* parent = 0) : QObject(parent), mpNodeItemGraphics(0) {}; 00041 virtual ~NodeItemBase() { 00042 foreach(NodeConnectorBase* nc: mNodeConnectors) { 00043 delete nc; 00044 } 00045 mNodeConnectors.clear(); 00046 if (mpGraphicsItem) { 00047 delete mpNodeItemGraphics; 00048 mpNodeItemGraphics = 0; 00049 } 00050 }; 00051 00052 virtual const ConnectorList& connectors(NodeConnectorBase::ConnectorFlags cf) const { 00053 ConnectorList res; 00054 foreach(NodeConnectorBase* nc: mNodeConnectors) { 00055 if (cf == NodeConnectorBase::All || nc->connectorFlags() & cf == cf) { 00056 res.push_back(nc); 00057 } 00058 } 00059 //ConnectorList res; = this->findChildren<NodeConnectorBase>(); 00060 return res; 00061 }; 00062 virtual const ConnectorList& connectors() const { return mNodeConnectors; }; 00063 virtual bool addConnector(NodeConnectorBase* nc) { 00064 //nc.setParent(this); 00065 if (!mNodeConnectors.contains(nc)) { 00066 mNodeConnectors.push_back(nc); 00067 nc.setParentNodeItem(this); 00068 mpNodeItemGraphics->updateNodeConnectorTransforms(); 00069 emit connectorAdded(nc); 00070 return true; 00071 } 00072 return false; 00073 }; 00074 virtual bool deleteNodeConnector(NodeConnectorBase* nc) { 00075 if (mNodeConnectors.removeOne(nc)) { 00076 delete nc; 00077 mpNodeItemGraphics->updateNodeConnectorTransforms(); 00078 emit connectorDeleted(nc); 00079 return true; 00080 } 00081 return false; 00082 }; 00083 00084 }; 00085 00086 #endif