nodeeditor_doxy
src/Core/NodeItemBase.h
Go to the documentation of this file.
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