summaryrefslogtreecommitdiffstats
path: root/src/libavoid
diff options
context:
space:
mode:
authormjwybrow <mjwybrow@users.sourceforge.net>2006-02-14 00:36:28 +0000
committermjwybrow <mjwybrow@users.sourceforge.net>2006-02-14 00:36:28 +0000
commitfa668afcbd7dc12ef748e0d0b4fd62fb9441c13e (patch)
treedd81610ccafce158141f5e63505aeac2c4fe3b6e /src/libavoid
parentextending the font selector preview string (patch #1240559 by cmarqu) (diff)
downloadinkscape-fa668afcbd7dc12ef748e0d0b4fd62fb9441c13e.tar.gz
inkscape-fa668afcbd7dc12ef748e0d0b4fd62fb9441c13e.zip
* src/graphlayout/graphlayout.cpp, src/conn-avoid-ref.cpp,
src/conn-avoid-ref.h, src/libavoid/connector.cpp, src/libavoid/connector.h: Change the behaviour and naming of some connector querying code after feedback from Tim Dwyer in implementing graph drawing functionality. (bzr r136)
Diffstat (limited to 'src/libavoid')
-rw-r--r--src/libavoid/connector.cpp33
-rw-r--r--src/libavoid/connector.h8
2 files changed, 38 insertions, 3 deletions
diff --git a/src/libavoid/connector.cpp b/src/libavoid/connector.cpp
index 06a0cd4aa..4d5821741 100644
--- a/src/libavoid/connector.cpp
+++ b/src/libavoid/connector.cpp
@@ -421,8 +421,14 @@ const unsigned int ConnRef::runningFrom = 2;
const unsigned int ConnRef::runningToAndFrom =
ConnRef::runningTo | ConnRef::runningFrom;
+// XXX: attachedShapes and attachedConns both need to be rewritten
+// for constant time lookup of attached objects once this info
+// is stored better within libavoid.
-void attachedToShape(IntList &conns, const unsigned int shapeId,
+
+ // Returns a list of connector Ids of all the connectors of type
+ // 'type' attached to the shape with the ID 'shapeId'.
+void attachedConns(IntList &conns, const unsigned int shapeId,
const unsigned int type)
{
ConnRefList::iterator fin = connRefs.end();
@@ -437,6 +443,31 @@ void attachedToShape(IntList &conns, const unsigned int shapeId,
}
+ // Returns a list of shape Ids of all the shapes attached to the
+ // shape with the ID 'shapeId' with connection type 'type'.
+void attachedShapes(IntList &shapes, const unsigned int shapeId,
+ const unsigned int type)
+{
+ ConnRefList::iterator fin = connRefs.end();
+ for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i) {
+ if ((type & ConnRef::runningTo) && ((*i)->_dstId == shapeId)) {
+ if ((*i)->_srcId != 0)
+ {
+ // Only if there is a shape attached to the other end.
+ shapes.push_back((*i)->_srcId);
+ }
+ }
+ else if ((type & ConnRef::runningFrom) && ((*i)->_srcId == shapeId)) {
+ if ((*i)->_dstId != 0)
+ {
+ // Only if there is a shape attached to the other end.
+ shapes.push_back((*i)->_dstId);
+ }
+ }
+ }
+}
+
+
// It's intended this function is called after shape movement has
// happened to alert connectors that they need to be rerouted.
void callbackAllInvalidConnectors(void)
diff --git a/src/libavoid/connector.h b/src/libavoid/connector.h
index 1fd4255a8..a08b9ab8a 100644
--- a/src/libavoid/connector.h
+++ b/src/libavoid/connector.h
@@ -64,7 +64,9 @@ class ConnRef
void makePathInvalid(void);
friend void markConnectors(ShapeRef *shape);
- friend void attachedToShape(IntList &conns,
+ friend void attachedShapes(IntList &shapes,
+ const unsigned int shapeId, const unsigned int type);
+ friend void attachedConns(IntList &conns,
const unsigned int shapeId, const unsigned int type);
static const unsigned int runningTo;
@@ -91,7 +93,9 @@ class ConnRef
extern ConnRefList connRefs;
extern void callbackAllInvalidConnectors(void);
-extern void attachedToShape(IntList &conns, const unsigned int shapeId,
+extern void attachedConns(IntList &conns, const unsigned int shapeId,
+ const unsigned int type);
+extern void attachedShapes(IntList &shapes, const unsigned int shapeId,
const unsigned int type);
}