1 /*! 2 @file 3 @author Albert Semenov 4 @date 01/2009 5 */ 6 #ifndef BASE_GRAPH_CONNECTION_H_ 7 #define BASE_GRAPH_CONNECTION_H_ 8 9 #include <MyGUI.h> 10 #include <BaseLayout/BaseLayout.h> 11 12 namespace wraps 13 { 14 class BaseGraphNode; 15 class BaseGraphConnection; 16 typedef std::vector<BaseGraphConnection*> VectorConnection; 17 typedef MyGUI::Enumerator<VectorConnection> EnumeratorConnection; 18 19 class BaseGraphConnection : 20 public BaseLayout 21 { 22 public: BaseGraphConnection(MyGUI::Widget * _widget)23 BaseGraphConnection(MyGUI::Widget* _widget) : 24 BaseLayout("", _widget), 25 mOwnerNode(nullptr) 26 { 27 mType = mMainWidget->getUserString("Type"); 28 mName = mMainWidget->getUserString("Name"); 29 30 const int offset = 30; 31 mOffset = MyGUI::IntSize::parse(mMainWidget->getUserString("Direction")); 32 mOffset.width *= offset; 33 mOffset.height *= offset; 34 } 35 getOwnerNode()36 BaseGraphNode* getOwnerNode() const 37 { 38 return mOwnerNode; 39 } getType()40 const std::string& getType() const 41 { 42 return mType; 43 } getName()44 const std::string& getName() const 45 { 46 return mName; 47 } 48 getAbsoluteCoord()49 MyGUI::IntCoord getAbsoluteCoord() const 50 { 51 return mMainWidget->getAbsoluteCoord(); 52 } getOffset()53 MyGUI::IntSize getOffset() const 54 { 55 return mOffset; 56 } 57 58 // все присоединениые к нам точки isAnyConnection()59 bool isAnyConnection() const 60 { 61 return !mConnection.empty(); 62 } getConnectionEnumerator()63 EnumeratorConnection getConnectionEnumerator() const 64 { 65 return EnumeratorConnection(mConnection); 66 } 67 isAnyReverseConnection()68 bool isAnyReverseConnection() const 69 { 70 return !mReverseConnection.empty(); 71 } getReverseConnectionEnumerator()72 EnumeratorConnection getReverseConnectionEnumerator() const 73 { 74 return EnumeratorConnection(mReverseConnection); 75 } 76 addConnectionPoint(BaseGraphConnection * _point)77 void addConnectionPoint(BaseGraphConnection* _point) 78 { 79 mConnection.push_back(_point); 80 _point->_addReverseConnectionPoint(this); 81 } 82 removeConnectionPoint(BaseGraphConnection * _point)83 void removeConnectionPoint(BaseGraphConnection* _point) 84 { 85 VectorConnection::iterator item = std::find(mConnection.begin(), mConnection.end(), _point); 86 MYGUI_ASSERT(item != mConnection.end(), "Item not found"); 87 mConnection.erase(item); 88 _point->_removeReverseConnectionPoint(this); 89 } 90 91 /*internal:*/ _setOwnerNode(BaseGraphNode * _owner)92 void _setOwnerNode(BaseGraphNode* _owner) 93 { 94 mOwnerNode = _owner; 95 } 96 _getMainWidget()97 MyGUI::Widget* _getMainWidget() const 98 { 99 return mMainWidget; 100 } 101 _addReverseConnectionPoint(BaseGraphConnection * _point)102 void _addReverseConnectionPoint(BaseGraphConnection* _point) 103 { 104 mReverseConnection.push_back(_point); 105 } 106 _removeReverseConnectionPoint(BaseGraphConnection * _point)107 void _removeReverseConnectionPoint(BaseGraphConnection* _point) 108 { 109 VectorConnection::iterator item = std::find(mReverseConnection.begin(), mReverseConnection.end(), _point); 110 MYGUI_ASSERT(item != mReverseConnection.end(), "Item not found"); 111 mReverseConnection.erase(item); 112 } 113 114 private: 115 BaseGraphNode* mOwnerNode; 116 std::string mType; 117 std::string mName; 118 VectorConnection mConnection; 119 VectorConnection mReverseConnection; 120 MyGUI::IntSize mOffset; 121 122 }; 123 124 } 125 126 #endif // BASE_GRAPH_CONNECTION_H_ 127