Iteration 1 * Simple, starting point * Function: scribble, no store/no save * Try: resize, cover it with another window, minimize/restore. package scribble1 scribble1/Scribble.java scribble1/ScribbleCanvas.java scribble1/ScribbleCanvasListener.java Iteration 2 * Add basic functions * Enhancement by modification * Functions: scribble, stored menu bar color selection: color chooser file handling: new, open, save, save as, save on exit file chooser: open, save as, dialog: about, exit package scribble2 scribble2/Scribble.java scribble2/ScribbleCanvas.java scribble2/ScribbleCanvasListener.java scribble2/Stroke.java scribble2/ColorDialog.java Iteration 3 * Refactoring * Builde an extensible architecture * Desired extensions Drawing functions: scribble, line, oval, rect, eraser * Template methods to allow refinement of ScribbleCanvas and ScribbleCanvasListener * Shape - Stroke * Tool - AbstractTool - ScribbleTool package scribble3 scribble3/Scribble.java scribble3/ScribbleCanvas.java scribble3/ScribbleCanvasListener.java scribble3/Shape.java scribble3/Stroke.java scribble3/Tool.java scribble3/AbstractTool.java scribble3/ScribbleTool.java scribble3/ColorDialog.java Iteration 4 * Enhancement by extension * Function drawing tools: scribble, line, oval, rect, eraser * Have a few basic features working in the architecture * Toolkit, interaction: toolbar -> toolkit -> canvas -> listener * TwoEndsShape, line, oval, rect * TwoEndsTool package draw1 draw1/DrawingPad.java draw1/DrawingCanvas.java draw1/DrawingCanvasListener.java draw1/ToolKit.java draw1/TwoEndsShape.java draw1/LineShape.java draw1/OvalShape.java draw1/RectangleShape.java draw1/TwoEndsTool.java Iteration 5 * Refactoring & extension * Builde an extensible architecture * Desired extensions More tools/shapes * TwoEndsShapeTool package draw2 draw2/DrawingPad.java draw2/TwoEndsShapeTool.java draw2/FilledOvalShape.java draw2/FilledRectangleShape.java Iteration 6 * Enhancement by extension * Function keypress tool menu font menu package draw3 draw3/DrawingPad.java draw3/KeyboardDrawingCanvas.java draw3/KeyboardDrawingCanvasListener.java draw3/Text.java draw3/KeyboardTool.java draw3/TextTool.java