diff options
Diffstat (limited to 'src/graphui/classes/jogamp')
-rw-r--r-- | src/graphui/classes/jogamp/graph/ui/TreeTool.java | 64 |
1 files changed, 48 insertions, 16 deletions
diff --git a/src/graphui/classes/jogamp/graph/ui/TreeTool.java b/src/graphui/classes/jogamp/graph/ui/TreeTool.java index b26ec8417..c37cd53d8 100644 --- a/src/graphui/classes/jogamp/graph/ui/TreeTool.java +++ b/src/graphui/classes/jogamp/graph/ui/TreeTool.java @@ -79,18 +79,16 @@ public class TreeTool { * @return true to signal operation complete and to stop traversal, i.e. {@link Visitor1#visit(Shape)} returned true, otherwise false */ public static boolean forAll(final List<Shape> shapes, final Visitor1 v) { - for(int i=0; i<shapes.size(); ++i) { + boolean res = false; + for(int i=0; !res && i<shapes.size(); ++i) { final Shape s = shapes.get(i); - boolean res = v.visit(s); + res = v.visit(s); if( !res && s instanceof Container ) { final Container c = (Container)s; res = c.forAll(v); } - if( res ) { - return true; - } } - return false; + return res; } /** @@ -100,21 +98,19 @@ public class TreeTool { * @return true to signal operation complete and to stop traversal, i.e. {@link Visitor2#visit(Shape, PMVMatrix4f)} returned true, otherwise false */ public static boolean forAll(final List<Shape> shapes, final PMVMatrix4f pmv, final Visitor2 v) { - for(int i=0; i<shapes.size(); ++i) { + boolean res = false; + for(int i=0; !res && i<shapes.size(); ++i) { final Shape s = shapes.get(i); pmv.pushMv(); s.setTransformMv(pmv); - boolean res = v.visit(s, pmv); + res = v.visit(s, pmv); if( !res && s instanceof Container ) { final Container c = (Container)s; res = c.forAll(pmv, v); } pmv.popMv(); - if( res ) { - return true; - } } - return false; + return res; } /** @@ -130,22 +126,58 @@ public class TreeTool { public static boolean forSortedAll(final Comparator<Shape> sortComp, final List<Shape> shapes, final PMVMatrix4f pmv, final Visitor2 v) { final Object[] shapesS = shapes.toArray(); Arrays.sort(shapesS, (Comparator)sortComp); + boolean res = false; - for(int i=0; i<shapesS.length; ++i) { + for(int i=0; !res && i<shapesS.length; ++i) { final Shape s = (Shape)shapesS[i]; pmv.pushMv(); s.setTransformMv(pmv); - boolean res = v.visit(s, pmv); + res = v.visit(s, pmv); if( !res && s instanceof Container ) { final Container c = (Container)s; res = c.forSortedAll(sortComp, pmv, v); } pmv.popMv(); - if( res ) { - return true; + } + return res; + } + + public static boolean contains(final List<Shape> shapes, final Shape s) { + if( shapes.contains(s) ) { + return true; + } + for(final Shape shape : shapes) { + if( shape instanceof Container ) { + if( ((Container)shape).contains(s) ) { + return true; + } } } return false; } + public static Shape getShapeByID(final List<Shape> shapes, final int id) { + final Shape[] res = { null }; + forAll(shapes, (final Shape s) -> { + if( s.getID() == id ) { + res[0] = s; + return true; + } else { + return false; + } + }); + return res[0]; + } + public static Shape getShapeByName(final List<Shape> shapes, final String name) { + final Shape[] res = { null }; + forAll(shapes, (final Shape s) -> { + if( s.getName().equals(name) ) { + res[0] = s; + return true; + } else { + return false; + } + }); + return res[0]; + } } |