Revision: 480 http://skycastle.svn.sourceforge.net/skycastle/?rev=480&view=rev Author: zzorn Date: 2008-04-26 08:20:43 -0700 (Sat, 26 Apr 2008) Log Message: ----------- Divided sketch app model into parts, and wrote a simple unit test. Added Paths: ----------- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/AbstractGroupElement.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/Group.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/GroupElement.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/GroupImpl.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/point/ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/point/StrokePoint.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/point/StrokePointImpl.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/sketch/ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/sketch/Sketch.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/sketch/SketchImpl.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/stroke/ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/stroke/Stroke.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/stroke/StrokeImpl.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/stroke/StrokeListener.java trunk/skycastle/modules/ui/src/test/java/org/skycastle/sketch/model/ trunk/skycastle/modules/ui/src/test/java/org/skycastle/sketch/model/SketchModelTest.java Removed Paths: ------------- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/Sketch.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/SketchImpl.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/Stroke.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/StrokePoint.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/StrokePointImpl.java Deleted: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/Sketch.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/Sketch.java 2008-04-26 14:56:30 UTC (rev 479) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/Sketch.java 2008-04-26 15:20:43 UTC (rev 480) @@ -1,22 +0,0 @@ -package org.skycastle.sketch; - -/** - * Holds the data of a drawing. - * <p/> - * Strokes can be added and removed. - * <p/> - * Strokes can be grouped into Layers. - * - * @author Hans Häggström - */ -public interface Sketch -{ - - /** - * Creates a new {@link Stroke} and adds it to the sketch. - * - * @return the created stroke. - */ - Stroke createStroke(); - -} Deleted: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/SketchImpl.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/SketchImpl.java 2008-04-26 14:56:30 UTC (rev 479) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/SketchImpl.java 2008-04-26 15:20:43 UTC (rev 480) @@ -1,23 +0,0 @@ -package org.skycastle.sketch; - -/** - * @author Hans Häggström - */ -public class SketchImpl - implements Sketch -{ - - /** - * Creates a new {@link org.skycastle.sketch.SketchImpl}. - */ - public SketchImpl() - { - throw new UnsupportedOperationException( "Constructor not yet implemented." ); // IMPLEMENT - } - - public Stroke createStroke() - { - throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT - - } -} Deleted: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/Stroke.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/Stroke.java 2008-04-26 14:56:30 UTC (rev 479) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/Stroke.java 2008-04-26 15:20:43 UTC (rev 480) @@ -1,16 +0,0 @@ -package org.skycastle.sketch; - -/** - * @author Hans Häggström - * <p/> - * Immutable, except points can be added (and removed?), and the changes listened to. - */ -public interface Stroke -{ - /** - * @param strokePoint a new point to be added to the stroke. - */ - void addPoint( StrokePoint strokePoint ); - - -} Deleted: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/StrokePoint.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/StrokePoint.java 2008-04-26 14:56:30 UTC (rev 479) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/StrokePoint.java 2008-04-26 15:20:43 UTC (rev 480) @@ -1,35 +0,0 @@ -package org.skycastle.sketch; - -/** - * A point on a {@link Stroke} - * <p/> - * Immutable. - * - * @author Hans Häggström - */ -public interface StrokePoint -{ - /** - * @return x coordinate of the point. - */ - float getX(); - - /** - * @return y coordinate of the point. - */ - float getY(); - - /** - * @param property the property to get - * - * @return the specified property of the stroke. - */ - float getValue( String property, float defaultValue ); - - /** - * @param property the property to get - * - * @return the specified property of the stroke. - */ - <T> T getObjectValue( String property, T defaultValue ); -} Deleted: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/StrokePointImpl.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/StrokePointImpl.java 2008-04-26 14:56:30 UTC (rev 479) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/StrokePointImpl.java 2008-04-26 15:20:43 UTC (rev 480) @@ -1,43 +0,0 @@ -package org.skycastle.sketch; - -/** - * @author Hans Häggström - */ -public class StrokePointImpl - implements StrokePoint -{ - - private float myX = - - /** - * Creates a new {@link org.skycastle.sketch.StrokePointImpl}. - */ - public StrokePointImpl() - { - throw new UnsupportedOperationException( "Constructor not yet implemented." ); // IMPLEMENT - } - - public float getX() - { - throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT - - } - - public float getY() - { - throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT - - } - - public float getValue( final String property, final float defaultValue ) - { - throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT - - } - - public <T> T getObjectValue( final String property, final T defaultValue ) - { - throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT - - } -} Copied: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/AbstractGroupElement.java (from rev 479, trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/AbstractGroupElement.java) =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/AbstractGroupElement.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/AbstractGroupElement.java 2008-04-26 15:20:43 UTC (rev 480) @@ -0,0 +1,49 @@ +package org.skycastle.sketch.model.group; + +/** + * @author Hans Haggstrom + */ +public abstract class AbstractGroupElement + implements GroupElement +{ + + //====================================================================== + // Private Fields + + private String myName = null; + + //====================================================================== + // Public Methods + + //---------------------------------------------------------------------- + // Constructors + + public AbstractGroupElement() + { + } + + public AbstractGroupElement( final String name ) + { + setName( name ); + } + + //---------------------------------------------------------------------- + // GroupElement Implementation + + public final String getName() + { + return myName; + } + + //---------------------------------------------------------------------- + // Other Public Methods + + /** + * @param name a user readable name for this element, or null if none available. + */ + public final void setName( final String name ) + { + myName = name; + } + +} Copied: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/Group.java (from rev 479, trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/Group.java) =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/Group.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/Group.java 2008-04-26 15:20:43 UTC (rev 480) @@ -0,0 +1,45 @@ +package org.skycastle.sketch.model.group; + +import org.skycastle.util.listenable.collection.CollectionListener; + +import java.util.List; + +/** + * A way to organize the contents of a {@link org.skycastle.sketch.model.sketch.Sketch}. + * <p/> + * A {@link Group} can contain other {@link Group}s, or {@link org.skycastle.sketch.model.stroke.Stroke}s. + * + * @author Hans Haggstrom + */ +// IDEA: In the future, various effects could be applied on a group basis. +public interface Group + extends GroupElement +{ + + /** + * @param groupElement the {@link GroupElement} that should be added + */ + void add( GroupElement groupElement ); + + /** + * @param groupElement the {@link GroupElement} that should be removed. + */ + void remove( GroupElement groupElement ); + + /** + * @param groupElementCollectionListener a listener that is notified when {@link GroupElement}s are added + * and removed to/from this {@link Group}. + */ + void addGroupListener( CollectionListener<GroupElement> groupElementCollectionListener ); + + /** + * @param groupElementCollectionListener the listener to remove. + */ + void removeGroupListener( CollectionListener<GroupElement> groupElementCollectionListener ); + + /** + * @return a read-only view on the {@link GroupElement}s in this {@link Group}. + */ + List<GroupElement> getElements(); + +} Copied: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/GroupElement.java (from rev 479, trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/GroupElement.java) =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/GroupElement.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/GroupElement.java 2008-04-26 15:20:43 UTC (rev 480) @@ -0,0 +1,16 @@ +package org.skycastle.sketch.model.group; + +/** + * Somethign that can be contained in a {@link Group}. + * + * @author Hans Haggstrom + */ +public interface GroupElement +{ + + /** + * @return a user readable name for this element, or null if none available. + */ + String getName(); + +} Copied: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/GroupImpl.java (from rev 479, trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/GroupImpl.java) =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/GroupImpl.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/group/GroupImpl.java 2008-04-26 15:20:43 UTC (rev 480) @@ -0,0 +1,53 @@ +package org.skycastle.sketch.model.group; + +import org.skycastle.util.listenable.collection.CollectionListener; +import org.skycastle.util.listenable.collection.list.ListenableArrayList; +import org.skycastle.util.listenable.collection.list.ListenableMutableList; + +import java.util.List; + +/** + * @author Hans Haggstrom + */ +public final class GroupImpl + extends AbstractGroupElement + implements Group +{ + + //====================================================================== + // Private Fields + + private final ListenableMutableList<GroupElement> myElements = new ListenableArrayList<GroupElement>( 100 ); + + //====================================================================== + // Public Methods + + //---------------------------------------------------------------------- + // Group Implementation + + public void add( final GroupElement groupElement ) + { + myElements.add( groupElement ); + } + + public void remove( final GroupElement groupElement ) + { + myElements.remove( groupElement ); + } + + public void addGroupListener( final CollectionListener<GroupElement> groupElementCollectionListener ) + { + myElements.addCollectionListener( groupElementCollectionListener ); + } + + public void removeGroupListener( final CollectionListener<GroupElement> groupElementCollectionListener ) + { + myElements.removeCollectionListener( groupElementCollectionListener ); + } + + public List<GroupElement> getElements() + { + return myElements.getReadOnlyList(); + } + +} Copied: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/point/StrokePoint.java (from rev 479, trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/StrokePoint.java) =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/point/StrokePoint.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/point/StrokePoint.java 2008-04-26 15:20:43 UTC (rev 480) @@ -0,0 +1,48 @@ +package org.skycastle.sketch.model.point; + +/** + * A point on a {@link org.skycastle.sketch.model.stroke.Stroke} + * <p/> + * Can be modified by filters when the stroke is created, but usually not modified in the final {@link + * org.skycastle.sketch.model.stroke.Stroke}. + * + * @author Hans Häggström + */ +public interface StrokePoint +{ + + /** + * @return x coordinate of the point. + */ + float getX(); + + /** + * @param x coordinate of the point. + */ + void setX( float x ); + + /** + * @return y coordinate of the point. + */ + float getY(); + + /** + * @param y coordinate of the point. + */ + void setY( float y ); + + /** + * @param property the property to get + * @param defaultValue value returned if the specified property is not available. + * + * @return the specified property of the stroke. + */ + <T> T getProperty( String property, T defaultValue ); + + /** + * @param property the property to set + * @param value the value to set the property to. + */ + void setProperty( String property, Object value ); + +} Copied: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/point/StrokePointImpl.java (from rev 479, trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/StrokePointImpl.java) =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/point/StrokePointImpl.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/point/StrokePointImpl.java 2008-04-26 15:20:43 UTC (rev 480) @@ -0,0 +1,95 @@ +package org.skycastle.sketch.model.point; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author Hans Häggström + */ +public final class StrokePointImpl + implements StrokePoint +{ + + //====================================================================== + // Private Fields + + private float myX = 0; + private float myY = 0; + + private Map<String, Object> myProperties = null; + + //====================================================================== + // Public Methods + + //---------------------------------------------------------------------- + // Constructors + + /** + * Creates a new {@link StrokePointImpl}. + */ + public StrokePointImpl() + { + this( 0, 0 ); + } + + /** + * Creates a new {@link StrokePointImpl}. + * + * @param x x coordinate of point, in canvas coordinates. + * @param y y coordinate of point, in canvas coordinates. + */ + public StrokePointImpl( float x, float y ) + { + setX( x ); + setY( y ); + } + + //---------------------------------------------------------------------- + // StrokePoint Implementation + + public float getX() + { + return myX; + } + + public void setX( final float x ) + { + myX = x; + } + + public float getY() + { + return myY; + } + + public void setY( final float y ) + { + myY = y; + } + + + public <T> T getProperty( final String property, final T defaultValue ) + { + if ( myProperties != null && + myProperties.containsKey( property ) ) + { + //noinspection unchecked + return (T) myProperties.get( property ); + } + else + { + return defaultValue; + } + } + + public void setProperty( final String property, final Object value ) + { + if ( myProperties == null ) + { + myProperties = new HashMap<String, Object>( 5 ); + } + + myProperties.put( property, value ); + } + +} Copied: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/sketch/Sketch.java (from rev 479, trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/Sketch.java) =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/sketch/Sketch.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/sketch/Sketch.java 2008-04-26 15:20:43 UTC (rev 480) @@ -0,0 +1,23 @@ +package org.skycastle.sketch.model.sketch; + +import org.skycastle.sketch.model.group.Group; + +/** + * Holds the data of a drawing. + * <p/> + * Strokes can be added and removed. + * <p/> + * Strokes can be grouped into Layers. + * + * @author Hans Häggström + */ +public interface Sketch +{ + + /** + * @return the base {@link org.skycastle.sketch.model.group.Group} for this {@link Sketch}. Can be used to + * modify the contents of the {@link Sketch}. + */ + Group getRootGroup(); + +} Copied: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/sketch/SketchImpl.java (from rev 479, trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/SketchImpl.java) =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/sketch/SketchImpl.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/sketch/SketchImpl.java 2008-04-26 15:20:43 UTC (rev 480) @@ -0,0 +1,39 @@ +package org.skycastle.sketch.model.sketch; + +import org.skycastle.sketch.model.group.Group; +import org.skycastle.sketch.model.group.GroupImpl; + +/** + * @author Hans Häggström + */ +public final class SketchImpl + implements Sketch +{ + + //====================================================================== + // Private Fields + + private final Group myRootGroup = new GroupImpl(); + + //====================================================================== + // Public Methods + + //---------------------------------------------------------------------- + // Constructors + + /** + * Creates a new {@link SketchImpl}. + */ + public SketchImpl() + { + } + + //---------------------------------------------------------------------- + // Sketch Implementation + + public Group getRootGroup() + { + return myRootGroup; + } + +} Copied: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/stroke/Stroke.java (from rev 479, trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/Stroke.java) =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/stroke/Stroke.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/stroke/Stroke.java 2008-04-26 15:20:43 UTC (rev 480) @@ -0,0 +1,50 @@ +package org.skycastle.sketch.model.stroke; + +import org.skycastle.sketch.model.group.GroupElement; +import org.skycastle.sketch.model.point.StrokePoint; + +import java.util.List; + +/** + * Immutable, except points can be added (and removed?), and the changes listened to. + * + * @author Hans Häggström + */ +public interface Stroke + extends GroupElement +{ + + /** + * Adds the specified {@link org.skycastle.sketch.model.point.StrokePoint} to this {@link Stroke}. + * + * @param addedPoint should not be null or already added. + */ + void addPoint( StrokePoint addedPoint ); + + /** + * Removes the specified {@link StrokePoint} from this {@link Stroke}. + * + * @param removedPoint should not be null, and should be present. + */ + void removePoint( StrokePoint removedPoint ); + + /** + * @return a read-only list with the {@link org.skycastle.sketch.model.point.StrokePoint}s in this {@link + * Stroke}. + */ + List<StrokePoint> getPoints(); + + /** + * @return the {@link StrokeListener} that is currently listening to changes to this {@link Stroke}. + */ + StrokeListener getStrokeListener(); + + /** + * Usually this is only called from the {@link org.skycastle.sketch.model.group.Group} that contains the + * {@link Stroke}. + * + * @param strokeListener the {@link StrokeListener} that should listen to changes to this {@link Stroke}. + */ + void setStrokeListener( StrokeListener strokeListener ); + +} Copied: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/stroke/StrokeImpl.java (from rev 479, trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/StrokeImpl.java) =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/stroke/StrokeImpl.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/stroke/StrokeImpl.java 2008-04-26 15:20:43 UTC (rev 480) @@ -0,0 +1,83 @@ +package org.skycastle.sketch.model.stroke; + +import org.skycastle.sketch.model.group.AbstractGroupElement; +import org.skycastle.sketch.model.point.StrokePoint; +import org.skycastle.util.ParameterChecker; +import org.skycastle.util.listenable.collection.list.ListenableArrayList; +import org.skycastle.util.listenable.collection.list.ListenableMutableList; + +import java.util.List; + +/** + * @author Hans Haggstrom + */ +public final class StrokeImpl + extends AbstractGroupElement + implements Stroke +{ + + //====================================================================== + // Private Fields + + private final ListenableMutableList<StrokePoint> myPoints = new ListenableArrayList<StrokePoint>( + INITIAL_POINT_CAPACITY ); + + private StrokeListener myStrokeListener; + + //====================================================================== + // Private Constants + + private static final int INITIAL_POINT_CAPACITY = 100; + + //====================================================================== + // Public Methods + + //---------------------------------------------------------------------- + // Stroke Implementation + + public void addPoint( final StrokePoint addedPoint ) + { + ParameterChecker.checkNotNull( addedPoint, "addedPoint" ); + ParameterChecker.checkNotAlreadyContained( addedPoint, myPoints, "myPoints" ); + + myPoints.add( addedPoint ); + + if ( myStrokeListener != null ) + { + myStrokeListener.onPointAdded( this, addedPoint ); + } + } + + + public void removePoint( final StrokePoint removedPoint ) + { + ParameterChecker.checkNotNull( removedPoint, "removedPoint" ); + ParameterChecker.checkContained( removedPoint, myPoints, "myPoints" ); + + myPoints.remove( removedPoint ); + + if ( myStrokeListener != null ) + { + myStrokeListener.onPointRemoved( this, removedPoint ); + } + } + + + public List<StrokePoint> getPoints() + { + return myPoints.getReadOnlyList(); + } + + + public StrokeListener getStrokeListener() + { + return myStrokeListener; + } + + + public void setStrokeListener( final StrokeListener strokeListener ) + { + myStrokeListener = strokeListener; + } + +} Added: trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/stroke/StrokeListener.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/stroke/StrokeListener.java (rev 0) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/model/stroke/StrokeListener.java 2008-04-26 15:20:43 UTC (rev 480) @@ -0,0 +1,29 @@ +package org.skycastle.sketch.model.stroke; + +import org.skycastle.sketch.model.point.StrokePoint; + +/** + * Listens to changes to {@link Stroke}s. + * + * @author Hans Häggström + */ +public interface StrokeListener +{ + + /** + * Called when a point is added to a {@link Stroke}. + * + * @param stroke the {@link Stroke} in question. + * @param point the point in question. + */ + void onPointAdded( Stroke stroke, StrokePoint point ); + + /** + * Called when a point is removed from a {@link Stroke}. + * + * @param stroke the {@link Stroke} in question. + * @param point the point in question. + */ + void onPointRemoved( Stroke stroke, StrokePoint point ); + +} Copied: trunk/skycastle/modules/ui/src/test/java/org/skycastle/sketch/model/SketchModelTest.java (from rev 479, trunk/skycastle/modules/ui/src/test/java/org/skycastle/sketch/TestSketchModel.java) =================================================================== --- trunk/skycastle/modules/ui/src/test/java/org/skycastle/sketch/model/SketchModelTest.java (rev 0) +++ trunk/skycastle/modules/ui/src/test/java/org/skycastle/sketch/model/SketchModelTest.java 2008-04-26 15:20:43 UTC (rev 480) @@ -0,0 +1,41 @@ +package org.skycastle.sketch.model; + +import junit.framework.TestCase; +import org.skycastle.sketch.model.point.StrokePointImpl; +import org.skycastle.sketch.model.sketch.Sketch; +import org.skycastle.sketch.model.sketch.SketchImpl; +import org.skycastle.sketch.model.stroke.Stroke; +import org.skycastle.sketch.model.stroke.StrokeImpl; + +import java.awt.Color; + +/** + * @author Hans Häggström + */ +@SuppressWarnings( { "JavaDoc" } ) +public class SketchModelTest + extends TestCase +{ + + //---------------------------------------------------------------------- + // Test Methods + + public void testCreateSketch() + throws Exception + { + final Sketch sketch = new SketchImpl(); + + final StrokeImpl stroke = new StrokeImpl(); + sketch.getRootGroup().add( stroke ); + + final StrokePointImpl strokePoint = new StrokePointImpl( 10.0f, 20.0f ); + stroke.addPoint( strokePoint ); + + strokePoint.setProperty( "foo", 23L ); + strokePoint.setProperty( "bar", Color.RED ); + + final Stroke element = (Stroke) sketch.getRootGroup().getElements().get( 0 ); + assertEquals( strokePoint, element.getPoints().get( 0 ) ); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.